【问题标题】:Need help creating a work item in tfs 2015 using javascript需要帮助在 tfs 2015 中使用 javascript 创建工作项
【发布时间】:2020-03-02 04:58:06
【问题描述】:

当我尝试传递我的 json 对象以创建任务项并传递内容类型 application/json-patch+json 和类型 PATCH 我得到一个错误:请求指示“内容类型方法类型 \"PATCH\" 的 \"\" 不支持。此方法的有效内容类型为 application/json=patch+json。"。

当我在 Postman 中使用相同的应用程序类型和 Patch 类型调用它时,它工作正常。我正在尝试创建一个网页,并在我单击表单上的按钮时让它调用服务。

var newJson = '[{"op":"add","path":"/fields/System.Title","value":"JavaScript implementation for Microsoft Account"}]';
var oJson = JSON.stringify(newJson);

//AZURE URL
var url = "https://dev.azure.com/AIZ-GL-dryrun/375977db-f390-4aac-bc4d-808f51360f9a//_apis/wit/workitems/$task?api-version=5.1";

jQuery.support.cors = true;
$.ajax({
url: url,
async: true,
data: oJson,
type:'PATCH',
contentType: "application/json-patch+json;",
beforeSend: function(xhr) {
xhr.setRequestHeader("Authorization", "Basic "+btoa(username+':'+password));
},
success: function(data){
    var myObject = JSON.stringify(data);
    alert("RESULT: "+myObject);
},
error: function(err) {
    alert(JSON.stringify(err))}
});

【问题讨论】:

  • 是 Azure DevOps 还是 TFS 2015?两者之间的 API 版本将大不相同。 TFS 2015 支持 2.x 系列的 REST API。
  • 我正在使用 TFS2015

标签: javascript ajax tfs tfs-2015 azure-devops-rest-api


【解决方案1】:

正如 Daniel 指出的那样,var url = "https://dev.azure.com/AIZ-GL-dryrun/375977db-f390-4aac-bc4d-808f51360f9a//_apis/wit/workitems/$task?api-version=5.1"

您尝试使用 5.1 版的 API。如您所见,Team Foundation Server 2015 不支持此版本。

需要在 TFS 2015 上使用 2.x 版,然后重试。更多api版本详情请看官方链接--REST API Versioning


更新,用post代替patch再试一次。

return $.ajax({
        url: "https://{account}.visualstudio.com/DefaultCollection/{project}/_apis/wit/workitems/$Bug?api-version=1.0",
        type: "POST",
        headers: {
            "Authorization": "Basic " + btoa("{user}:{password}"),
            "X-HTTP-Method-Override": "PATCH",
            "Content-Type": "application/json-patch+json; charset=utf-8"
        },
        dataType: 'json',
        cache: false,
        data: JSON.stringify(myData),
        async: false,
        error: function (jqXHR, textStatus, errorThrown) {
                //alert(jqXHR.status + ': ' + errorThrown);
            },
        success: function (data) {
           // alert(JSON.stringify(data));
            }
        });

另一种方式,您也可以使用 Work item batch api 代替:

例如:

http://[collection url]/_apis/wit/$batch?api-version=1.0

主体:

[
  {
    "method": "PATCH",
    "uri": "/ScrumStarain/_apis/wit/workItems/$Product Backlog Item?api-version=1.0",
    "headers": {
      "Content-Type": "application/json-patch+json"
    },
    "body": [
      {
        "op": "add",
        "path": "/fields/System.Title",
        "value": "apip1"
      },
      {
        "op": "add",
        "path": "/id",
        "value": "-1"
      }
    ]
  },
  {
    "method": "PATCH",
    "uri": "/ScrumStarain/_apis/wit/workItems/$Task?api-version=1.0",
    "headers": {
      "Content-Type": "application/json-patch+json"
    },
    "body": [
      {
        "op": "add",
        "path": "/fields/System.Title",
        "value": "apip2"
      },
      {
        "op": "add",
        "path": "/id",
        "value": "-2"
      }

    ]
  }
]

更多信息,可以参考:Work item batch operations

【讨论】:

  • 感谢您的帮助和建议。我编辑了网址并再次尝试。但是我仍然遇到同样的错误....任何其他提示来解决这个问题?var url = "dev.azure.com/AIZ-GL-dryrun/…"
  • 您好 Mirooshidan Asokan,请使用 post 代替 patch 或使用工作项批处理 api。更多详情请查看我的更新回复
  • 您好 Mirooshidan Asokan,只是检查提供的信息是否有用。你能解决吗?如果我的回复有帮助或给出了正确的方向。感谢marking it as an answer,这也将帮助社区中的其他人。
猜你喜欢
  • 2017-01-06
  • 1970-01-01
  • 1970-01-01
  • 2020-12-16
  • 2018-06-13
  • 2011-03-08
  • 2020-03-06
  • 2021-08-25
  • 1970-01-01
相关资源
最近更新 更多