You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript调用Azure DevOps POST API遇400错误求助

Azure DevOps 创建工作项API 400错误排查与修复

问题场景

使用TypeScript调用Azure DevOps的POST接口创建工作项,Postman测试URL正常,但代码执行后返回400错误,无法通过UI输入标题创建工作项。

原代码问题分析

以下是代码中的核心错误点:

  1. Authorization头格式错误

    • PAT令牌需要先进行Base64编码,且格式必须为Basic <编码后的字符串>,原代码未正确闭合引号,也未对PAT做编码处理。
    • 正确的PAT编码方式:将:{PAT_TOKEN}(注意开头的冒号)转为Base64字符串。
  2. Content-Type头语法错误

    • 原代码使用了HTML转义字符&quot;,且结尾多了不必要的分号,导致头信息解析失败。正确的Content-Type应为application/json-patch+json。
  3. 请求体格式不符合要求

    • Azure DevOps的工作项创建API要求请求体是JSON数组(即使只修改一个字段),原代码直接传入单个对象,这是返回400错误的核心原因。
  4. 变量名错误

    • 最后console.log(data)中的data未定义,应为之前声明的result。

修正后的代码

// 替换为你的组织、项目名称和PAT令牌
const orgName = "{OrgName}";
const projectName = "{ProjectName}";
const patToken = "{Your-PAT-Token}";

const url = `https://dev.azure.com/${orgName}/${projectName}/_apis/wit/workitems/$Task?api-version=7.0`;

// 对PAT进行Base64编码
const encodedPat = btoa(`:${patToken}`);

const headers = {
  Authorization: `Basic ${encodedPat}`,
  "Content-Type": "application/json-patch+json",
};

// 请求体必须是数组格式
const payload = [
  {
    op: "add",
    path: "/fields/System.Title",
    from: null,
    value: "Sample task", // 这里可以替换为UI输入的标题值
  },
];

try {
  const response = await fetch(url, {
    method: "POST",
    body: JSON.stringify(payload),
    headers: headers,
  });

  if (!response.ok) {
    // 获取API返回的详细错误信息,便于排查
    const errorDetails = await response.text();
    throw new Error(`Error! status: ${response.status}, details: ${errorDetails}`);
  }

  const result = await response.json();
  console.log("工作项创建成功:", result);
} catch (error) {
  console.log("错误信息:", error.message);
  return error.message;
}

关键验证点

  • 确保PAT令牌拥有**Work Items (Write)**权限。
  • 替换代码中的占位符(组织名、项目名、PAT)为真实值。
  • UI输入的标题值需正确传入payload[0].value位置。

内容的提问来源于stack exchange,提问作者user22866575

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 17:22:32