【问题标题】:devops REST API: can not update work item status using PATCH methoddevops REST API:无法使用 PATCH 方法更新工作项状态
【发布时间】:2019-12-04 15:27:35
【问题描述】:

我正在使用 DevOps restapi 来获取一些信息。 POST 方法对我来说很好用。
我想更新我的工作项的状态。为此,我需要使用 PATCH 方法。哪个不起作用,也没有给出任何错误。

https://docs.microsoft.com/en-us/rest/api/azure/devops/wit/work%20items/update?view=azure-devops-rest-5.1

function postApiData(ApiUrl, responseBody) {
    var res = '';
    try {

        $.ajax({
            type: 'POST',
            async: false,
            url: ApiUrl,
            contentType: 'application/json',
            data: JSON.stringify(responseBody),
            cache: false,
            dataType: 'json',
            beforeSend: function (xhr) {
                xhr.setRequestHeader("Authorization", "Basic " + btoa("" + ":" + _token));
            },
        }).done(function (data) {
            res = data;
        }).fail(function (e) {

        });
    } catch (error) {
        var x = error;
        throw x;
    }
    return res;
};

对于补丁方法,我正在修改一些东西。但不更新我的工作项并没有给出任何错误。我还检查了我的令牌访问权限。我有完全访问权限。

type: 'PATCH',
contentType: 'application/json-patch+json',

【问题讨论】:

  • 我猜他们在 Azure DevOps 文档中混淆了很多方法。在这里,您还可以看到 create call with a PUTUpdate call with a POST。我认为您通常可以执行以下操作: Create = POST 和 Update = PUT
  • 我用 post 方法尝试过同样的事情,但它没有更新。
  • 您可以在 PATCH 中发布您发送的正文吗?
  • @JigarParekh,您可以使用 Fiddler 捕获错误。它可以告诉你为什么它没有成功更新工作项。另外,在 Fiddler 的帮助下,我编写了一个简单的示例,现在可以成功了。你可以试试看。

标签: javascript ajax azure-devops azure-devops-rest-api http-patch


【解决方案1】:

我在 Ajax 中使用 PATCH 编写了一个简单的示例:

<script type="text/javascript">
$(document).ready(function () {
    $("#SelectWIT").on("click", function () {
        var json= [{
                "op": "add",
                "path": "/fields/System.State",
                "value": "Closed"
              }];
        $.ajax({
            type: 'PATCH',
            url: 'https://dev.azure.com/{org name}/_apis/wit/workitems/{WIT id}?api-version=5.1',
            contentType: 'application/json-patch+json',
            data: JSON.stringify(json),
            cache: false,
            dataType: 'application/json-patch+json',
            beforeSend: function (xhr) {
                xhr.setRequestHeader("Authorization", "Basic " + btoa("" + ":" + "{PAT token}"));
            },
        }).error(function (e) {
            var s = "error error error";
        });
    })
});
</script>

注意:不仅contentType需要设置为application/json-patch+jsondataType也一样。


我使用 Fiddler 来捕捉这个操作:

可以看到工作项状态更新成功。

更新:

【讨论】:

  • 这对我有用。但是在更新状态后,它在 ajax “没有从文本转换为应用程序/json-patch+json”中给出错误
  • @JigarParekh 这应该符合预期。它代表没有从服务器得到任何东西。你使用提琴手来捕捉这篇文章吗?如果是,您会看到响应正文中没有任何内容。因为服务器只是获取了post请求并执行它,而没有回复客户端。
  • @JigarParekh,在答案中查看我更新的图片。你可以看到当你用ajax调用api时,服务器没有回复消息(但是操作成功)。正如我从谷歌查到的,这似乎是 JQuery 的 默认问题stackoverflow.com/questions/10456240/…。与 Azure Devops 无关。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-05
  • 1970-01-01
  • 2015-06-15
  • 1970-01-01
  • 2017-12-25
  • 2021-05-30
  • 2021-08-24
相关资源
最近更新 更多