Родительская ссылка Azure DevOps REST API на существующую ошибку рабочего элемента

Я пытаюсь использовать 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

Работает ли запрос с Postman? Если да, проверьте панель управления Postman на наличие всего запроса. Часто подобные ошибки возникают из-за отсутствия заголовков http. Postman автоматически добавит заголовки http, а PS — нет. Решение состоит в том, чтобы добавить недостающий заголовок, найденный в Postman, в код PS. Ошибка указывает на то, что сервер ожидает сериализованные данные.

jdweng 19.07.2024 01:45
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
1
1
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Результат:

Другие вопросы по теме