Пустое содержимое тела при выполнении запроса PUT на вики-страницах - PullRequest
3 голосов
/ 26 марта 2019

API-интерфейс REST API Azure DevOps Services - страницы вики

Я пытаюсь динамически обновлять страницу вики DevOps Azure, добавляя в нее самые новые коммиты, когда в репозиторий вносятся изменения.,Когда я пытаюсь поместить историю фиксации в вики-страницу, поле содержимого внутри тела становится пустым.

enter image description here

Запрос выполняется через Powershell и выглядитнапример:

function postToWiki($Commits) {

    $wikiUrl = "https://dev.azure.com/$organization/$project/_apis/wiki/wikis/Ekonomiredovisning.wiki/pages?path=MyWikiPage&api-version=5.0"
    $Etag = getWikiPageVersion
    $headers = @{
    Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"; 
    'If-Match' = $Etag}
    $body = @{ content = $Commits }
    $json = $body | ConvertTo-Json

    Invoke-WebRequest -Uri $wikiUrl -Headers $headers -Body $json -ContentType "application/json" -Method Put
}

Дополнительная информация, которая может быть полезна:

  • Это работает, когда я отправляю более простые строки, такие как "Hello"
  • Отправляется JSONдопустимо в соответствии с https://jsonlint.com/.
  • Переменная $ Commit довольно велика, до 6000 строк.

1 Ответ

0 голосов
/ 25 июня 2019

У меня сегодня такая же проблема. В моем теле содержались специальные символы HTML, которые не были экранированы в запросе.

Попробуй сбежать из специальных символов (или ...). В PowerShell вы можете использовать следующую сборку:

Add-Type -AssemblyName System.Web
$encodedBody = [System.Web.HttpUtility]::HtmlEncode($Commits)

Результат:


# Construct the wiki REST URI 
# $uri = $WikiUri +$WikiPath + $($contentPackage.version)
$uri = "$($env:WikiUri)$($contentPackage)&api-version=5.0"

# Encode and convert to json
Add-Type -AssemblyName System.Web
$encodedContent = [System.Web.HttpUtility]::HtmlEncode($content)

$data = @{ Content=$encodedContent; } | ConvertTo-Json;

# Set Request
$params = @{uri = "$($uri)";
  Method = 'PUT';
  Headers = $header;
  ContentType = "application/json";
  Body = $data;
}

# Call
Invoke-WebRequest @params 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...