Я пытаюсь использовать REST API Azure DevOps для создания и/или обновления рабочего элемента на досках, чтобы можно было добавить родительскую ссылку. Пока это безуспешно. и выдает ошибку...
Invoke-RestMethod : {"$id":"1","innerException":null,"message":"Вы должны передать действительный документ исправления в теле сообщения request.","typeName":"Microsoft.VisualStudio.Services.Common.VssPropertyValidationException, Microsoft.VisualStudio.Services.Common","typeKey":"VssPropertyValidationException","errorCode":0,"eventId":3000}
Вот код, который я пробовал.
# Define your organization, project, PAT (Personal Access Token), and work item IDs
$organization = "Org"
$project = "Test%20Project"
$token = "PAT"
$parentWorkItemId = "7787"
$childWorkItemId = "8678"
$ContentType = "application/json-patch+json"
# Construct the URI for the REST API call
$uri = "https://dev.azure.com/$organization/$project/_apis/wit/workitems/$childWorkItemId/?api- version=7.2-preview.3"
echo $uri
# Create the JSON body for adding a parent link
$body = @"
[
{
"op": "add",
"path": "/relations/-",
"value": {
"rel": "System.LinkTypes.Hierarchy-Reverse",
"url": "https://dev.azure.com/$organization/_apis/wit/workItems/$parentWorkItemId"
}
}
]
"@
# Set the header with the PAT for authentication
$headers = @{
Authorization = "Basic " + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$($token)"))
}
# Make the PATCH request to add the parent link
Invoke-RestMethod -Uri $uri -Method Patch -Body $body -ContentType $ContentType -Headers $headers
Invoke-RestMethod : {"$id":"1","innerException":null,"message":"В теле запроса необходимо передать действительный документ исправления.".
Эта проблема обычно возникает из-за отсутствия [{}]
в формате тела запроса. Но в коде PowerShell тело запроса должно быть правильным.
Единственная проблема, которую я вижу, заключается в том, что в URL-адресе Rest API есть дополнительные пробелы.
Например:
$uri = "https://dev.azure.com/$organization/$project/_apis/wit/workitems/$childWorkItemId/?api- version=7.2-preview.3"
После удаления дополнительных пробелов сценарий PowerShell сможет работать как положено.
Вот пример:
# Define your organization, project, PAT (Personal Access Token), and work item IDs
$organization = "ORG"
$project = "PROJECT"
$token = "PAT"
$parentWorkItemId = "1421"
$childWorkItemId = "1420"
$ContentType = "application/json-patch+json"
# Construct the URI for the REST API call
$uri = "https://dev.azure.com/$organization/$project/_apis/wit/workitems/$childWorkItemId/?api-version=7.2-preview.3"
echo $uri
# Create the JSON body for adding a parent link
$body = @"
[
{
"op": "add",
"path": "/relations/-",
"value": {
"rel": "System.LinkTypes.Hierarchy-Reverse",
"url": "https://dev.azure.com/$organization/_apis/wit/workItems/$parentWorkItemId"
}
}
]
"@
# Set the header with the PAT for authentication
$headers = @{
Authorization = "Basic " + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$($token)"))
}
# Make the PATCH request to add the parent link
Invoke-RestMethod -Uri $uri -Method Patch -Body $body -ContentType $ContentType -Headers $headers
Результат:
Работает ли запрос с Postman? Если да, проверьте панель управления Postman на наличие всего запроса. Часто подобные ошибки возникают из-за отсутствия заголовков http. Postman автоматически добавит заголовки http, а PS — нет. Решение состоит в том, чтобы добавить недостающий заголовок, найденный в Postman, в код PS. Ошибка указывает на то, что сервер ожидает сериализованные данные.