gpt4 book ai didi

rest - 通过调用 rest-api 更新 tfs 的 wiki 页面

转载 作者:行者123 更新时间:2023-12-05 00:42:34 25 4
gpt4 key购买 nike

我想使用此文档更新 tfs 的现有 wiki 页面:
https://docs.microsoft.com/de-de/rest/api/azure/devops/wiki/pages/create%20or%20update?view=azure-devops-rest-4.1

创建一个新的 wiki 页面(带有内容)是没有问题的。那工作正常。
但我想编辑一个现有的。 tfs 文档说 API 调用的唯一区别是使用“ If-Match ”-header(请参阅部分 Request Header )。

我这里有3种情况:

  • 使用 “If-Match”-Header 或空:获取“ 412 Precondition Failed ”错误。
  • 使用“If-Match”-Header 和 随机值 : 得到一个“ 400 Bad Request ”错误。
  • 使用“If-Match”-Header 和 正好 40 个字符 (如页面修订的版本哈希(例如'09f62be600a3b6d36d21b294dbb00921a5ba03ec')):再次出现“ 412 Precondition Failed ”错误。

  • 我认为修订哈希(40 个字符)应该是一个好方法,因为非 40 字符上的错误消息返回 400 错误。

    但它没有用?有没有人知道 id tfs 想要的想法?我使用 Postman 和 C# 通过 api 进行更新。您可以在下面看到我的示例代码:
    var handler = new HttpClientHandler()
    {
    UseDefaultCredentials = true,
    UseProxy = false,
    };

    var client = new HttpClient(handler);
    client.BaseAddress = new Uri(".../pages/pagename" + "?api-version=4.1");
    client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));

    var putContent = new StringContent("{ \"content\": \"New content for page\" }", Encoding.UTF8, "application/json");

    client.DefaultRequestHeaders.TryAddWithoutValidation("If-Match", "09f62be600a3b6d36d21b294dbb00921a5ba03ec");

    var responseTask = client.PutAsync(client.BaseAddress, putContent);

    var result = responseTask.Result;
    var content = result.Content.ReadAsStringAsync().Result;

    var code = result.StatusCode;
    var body = content;

    最佳答案

    根据Create or Update Wiki API , 如果我们想编辑维基页面,If-Match标题是必需的。 If-Matchth的值是维基页面 ETag。

    ETags can also be used for optimistic concurrency control, as a way to help prevent simultaneous updates of a resource from overwriting each other



    所以我们需要在更新前获取 wiki Etag。请尝试更改代码如下:
    var baseUrl = "xxxxx";
    var handler = new HttpClientHandler()
    {
    UseDefaultCredentials = true,
    UseProxy = false,
    };

    var client = new HttpClient(handler)
    {
    BaseAddress = new Uri(baseUrl)
    };
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", "YourToken");
    var getResult = client.GetAsync(baseUrl).Result;
    var etag = getResult.Headers.GetValues("ETag");
    var putContent = new StringContent("{ \"content\": \"New content for page\" }", Encoding.UTF8, "application/json");
    client.DefaultRequestHeaders.TryAddWithoutValidation("If-Match", etag);
    var responseTask = client.PutAsync(client.BaseAddress, putContent);
    var result = responseTask.Result;
    var content = result.Content.ReadAsStringAsync().Result;

    测试结果:

    enter image description here

    关于rest - 通过调用 rest-api 更新 tfs 的 wiki 页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54404646/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com