Я хочу отказаться от запроса извлечения в TFS, используя REST API.
У меня TFS 2018, использующая PowerShell 5.1 для доступа к API REST через функцию Invoke-RestMethod. Я могу получить все виды информации и могу POST создать новый PR, но я не могу обновить существующий PR.
Я звоню https://<tfs_url>/<ProjectCollection>/<project>/_apis/git/repositories?api-version=3.0
и получаю список всех репозиториев в проекте.
Я фильтрую в Powershell нужный репозиторий и беру свойство Id полезной нагрузки JSON, передавая его в запрос GET:
https://<tfs_url>/<ProjectCollection>/<project>/_apis/git/repositories/4c2a4916-27bf-40f2-bb32-00e4a20d44e8/PullRequests?api-version=3.0
Это возвращает все (или, по крайней мере, все активные) запросы извлечения, которые я фильтрую в Powershell, в PR с исходными / целевыми ссылками, что дает мне объект с PullRequestID и кучу другой информации.
Идентификатор PR совпадает при просмотре в веб-интерфейсе
Теперь я пытаюсь обновить статус (или другое свойство) PR, следуя документации MS и примерам
Мой код PS:
$requestBody = @"
{
"status" = "abandoned"
}
"@
$fullURL = https://<tfs_url>/<ProjectCollection>/<project>/_apis/git/repositories/4c2a4916-27bf-40f2-bb32-00e4a20d44e8/pullrequests/2418?api-version=3.0
$response = Invoke-RestMethod -UseDefaultCredentials -uri $fullURL -Method Patch -Body $requestBody -ContentType application/json-patch+json
, который возвращает общую ошибку: The remote server returned an error: (500) Internal Server Error.
Итак, я протестировал свои запросы в Chrome с помощью Restlet Client, и у меня получилась ошибка с тем же типом url / body / content: "Invalid argument value.\r\nParameter name: The pull request to update was not valid."
Я попытался использовать заголовок PR вместо идентификатора, попробовал несколько разных идентификаторов из ответа, который я получил, когда получил информацию PR.
Я попытался создать токен личного доступа и использовать базовый заголовок аутентификации, следующий за пост в блоге Маркуса Феллинга
Я попытался вызвать функцию Invoke-RestMethod, используя типы контента 'application / json' и 'application / json-patch + json' с тем же результатом.
Я также пытался использовать другую версию API (4.1, все запросы, которые я использую с 5.0 или 5.0-preview.1, терпят неудачу)
Я также попытался добавить свойство artifactId
в мое тело, потому что в документации упоминается, что оно однозначно идентифицирует запрос на извлечение. (Я не нашел примеров, показывающих использование этого свойства, и я получаю ту же ошибку в клиенте перезапуска, указывающую, что запрос на извлечение для обновления был недействительным)
Документация показывает ту же структуру URL, которую я использую с версией 4.1, и я даже не могу выполнить простые запросы, которые просто обновляют описание или заголовок, так что, похоже, это проблема моего URL, а не тела моей просьбы.