TypeScript调用Azure DevOps POST API遇400错误求助
Azure DevOps 创建工作项API 400错误排查与修复
问题场景
使用TypeScript调用Azure DevOps的POST接口创建工作项,Postman测试URL正常,但代码执行后返回400错误,无法通过UI输入标题创建工作项。
原代码问题分析
以下是代码中的核心错误点:
Authorization头格式错误
- PAT令牌需要先进行Base64编码,且格式必须为
Basic <编码后的字符串>,原代码未正确闭合引号,也未对PAT做编码处理。 - 正确的PAT编码方式:将
:{PAT_TOKEN}(注意开头的冒号)转为Base64字符串。
- PAT令牌需要先进行Base64编码,且格式必须为
Content-Type头语法错误
- 原代码使用了HTML转义字符
",且结尾多了不必要的分号,导致头信息解析失败。正确的Content-Type应为application/json-patch+json。
- 原代码使用了HTML转义字符
请求体格式不符合要求
- Azure DevOps的工作项创建API要求请求体是JSON数组(即使只修改一个字段),原代码直接传入单个对象,这是返回400错误的核心原因。
变量名错误
- 最后
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
相关产品推荐
相关产品推荐

