TFS Rest API - запрос отмены извлечения - PullRequest
0 голосов
/ 11 мая 2018

Я хочу отказаться от запроса извлечения в 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 и кучу другой информации. enter image description here Идентификатор PR совпадает при просмотре в веб-интерфейсе enter image description here

Теперь я пытаюсь обновить статус (или другое свойство) 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, а не тела моей просьбы.

1 Ответ

0 голосов
/ 11 мая 2018

Тело вашего запроса имеет знак равенства (=), а не двоеточие (:).

$requestBody = @"
{
   "status": "abandoned"
}
"@

Не уверен на 100%, что это решит вашу реальную проблему, но я предполагаю, что это может быть связано?

...