【问题标题】:Azure DevOps API creating work item returns 404 errorAzure DevOps API 创建工作项返回 404 错误
【发布时间】:2021-04-22 16:09:10
【问题描述】:

我正在尝试使用 Azure API 添加工作任务,但我不断收到 404 错误。我试图做一个获取所有项目并且这工作(所以我的身份验证令牌工作正常)。我什至授予了令牌的所有 Azure 权限,但它仍然返回 404 错误。

public class Main
{
   public static void Main(string[] args)
   {
      AzureClient ac = new AzureClient();
      var task = ac.AddTask();
   }
}

public class AzureClient 
{
   private readonly HttpClient _client;

   public AzureClient()
   {
      _client = new HttpClient()
      {
         Timeout = TimeSpan.FromSeconds(30)
      };

      _client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
      // ADDED PAT HERE TO CLIENT
   }

   public async Task AddTask()
   {
      List<object> task = new List<object>
      {
         new { op = "add", path = "/fields/System.Title", value = "Test"}
      };

      string jsonTask = JsonConvert.SerializeObject(task);
      string baseUri = "some base uri";
      string uri = $"{baseUri}/_apis/wit/workitems/$Task?api-version=5.0";
      
      // RESPONSE HERE RETURNS 404
      var response = _client.PostAsync(uri, new StringContent(jsonTask, Encoding.UTF8, "application/json-patch+json")).Result;
   }
}

【问题讨论】:

  • baseUri 变量设置为什么?查看uri 变量并确保它是正确的。此外,您应该await 调用PostAsync 以避免死锁。
  • @DanielMann 我将修复异步部分,谢谢。我可以确认的基本 uri 有效,因为我测试了以下 url,它返回了我的组织“baseUri/_apis/projects?api-version=5.0”下的项目列表
  • REST API URI 需要包含项目名称或 ID。正如我所说,查看uri 变量。不要假设它是正确的。将该 URI 与 REST API 文档进行比较。
  • 您的目标是本地 Azure DevOps 服务器/TFS,还是面向 Azure DevOps?如果你的目标是 Azure DevOps,我强烈建议使用最新的 REST API 版本,即 6.1。除此之外,除非您愿意提供您尝试访问的确切 URI,否则任何人都无法为您提供更多指导。 404 错误意味着您没有为其提供 API 的有效 URI。
  • 等一下。如果您在本地,那么您如何使用dev.azure.com?那是行不通的。您没有提供完整的图片,这将使您很难为您提供帮助。请使用您正在使用的 exact URI 更新您的问题。出于隐私考虑,请随意编辑一些内容。还包括您正在使用的 TFS/Azure DevOps Server 的 版本

标签: c# azure-devops azure-devops-rest-api


【解决方案1】:

请在您的代码中使用'application/json-patch+json' 而不是'application/json'

 _client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

如果你使用邮递员测试Api,你会发现错误:

Valid content types for this method are: application/json-patch+json.

这样我们就需要使用application/json-patch+json

希望这会有所帮助。

【讨论】:

  • 虽然这不是我需要的,但你对我之后注意到的内容类型是正确的。
猜你喜欢
  • 1970-01-01
  • 2019-03-16
  • 2021-05-30
  • 2021-03-19
  • 2021-02-22
  • 2020-07-26
  • 2020-07-06
  • 1970-01-01
  • 2020-03-03
相关资源
最近更新 更多