为什么 Azure Devops API 告诉我必须为我的推送请求提供这些参数,而我已经这样做了?

问题描述 投票:0回答:1

我正在尝试通过 API 向我们的 Azure Devops 服务器发出 Git 推送请求。地址为https://MYSITE.visualstudio.com/MYPROJECT/_apis/git/repositories/2b34d4f7-2c1f-42e7-8861-u0ba34f72b40/pushes?api-version=5.1正文如下:

{
  "commits": [
    {
      "comment": "Just a dummy commit",
      "changes": [
        {
          "changeType": "edit",
          "item": {
            "path": "/src/MYPROJECT/MYPROJECT.csproj"
          },
          "newContent": {
            "content": "beans",
            "contentType": "rawText"
          }
        }
      ]
    }
  ],
  "refUpdates": [
    {
      "name": "refs/heads/TestDummyPRs/upgradeProjectToLatest",
      "oldObjectId": "058da4f3328cb1048cb43faf3b5158bc3b025615"
    }
  ]
}

我收到以下错误:

Web Request Failed after 4 attempts. Request: https://MYSITE.visualstudio.com/MYPROJECT/_apis/git/repositories/2b34d4f7-2c1f-42e7-8861-u0ba34f72b40/pushes?api-version=5.1. Status: BadRequest. Response: Invalid status code [BadRequest]. Response: {"$id":"1","innerException":null,"message":"The parameters are incorrect. A posted push must contain exactly one commit and one refUpdate.\r\nParameter name: newPush","typeName":"Microsoft.TeamFoundation.SourceControl.WebServer.InvalidArgumentValueException, Microsoft.TeamFoundation.SourceControl.WebServer","typeKey":"InvalidArgumentValueException","errorCode":0,"eventId":0}

“发布的推送必须恰好包含一个提交和一个 refUpdate”似乎并不完全合理,因为这正是我体内的内容。有人知道这里会发生什么吗?

请注意,我在发出其他网络请求时没有遇到任何问题,例如创建分支或检索文件内容。

我希望我的网络请求能够顺利进行,并创建一个包含对指定 refUpdate 的指定提交的推送。

我通过 Azure Devops Web 界面进行了手动推送并捕获了网络流量,我从中获取了以下 JSON 请求:

{
  "commits": [
    {
      "changes": [
        {
          "changeType": 2,
          "item": {
            "path": "/src/MYPROJECT/MYPROJECT.csproj"
          },
          "newContent": {
            "content": "beans",
            "contentType": 0
          }
        }
      ],
      "comment": "Just a dummy commit"
    }
  ],
  "refUpdates": [
    {
      "name": ""refs/heads/TestDummyPRs/upgradeProjectToLatest",
      "oldObjectId": "058da4f3328cb1048cb43faf3b5158bc3b025615"
    }
  ]
}

除了枚举字段使用数值而不是文本之外,这似乎与我从我的代码中进行的推送有意义地相同。我已经用枚举的数值尝试了我的代码,但这并没有改变错误的任何内容。

azure-devops azure-devops-rest-api
1个回答
0
投票

我发现了问题。来自我的应用程序的 Web 请求使用 UTF-16 编码发送,而 Postman 默认使用 UTF-8 编码。我将我的应用程序更改为使用 UTF-8 并且它有效。

© www.soinside.com 2019 - 2024. All rights reserved.