对Wiki页面执行PUT请求时,正文内容为空

时间:2019-03-26 11:11:53

标签: rest azure powershell azure-devops

Azure DevOps Services REST API 5.0 - Wiki Pages

每当对存储库进行更改时,我都试图动态更新Azure DevOps Wiki页面,并在其顶部显示最新的提交。 当我尝试将提交历史记录放入Wiki页面时,正文中的内容字段为空。

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”之类的简单字符串时,此方法就起作用了
  • 根据https://jsonlint.com/,正在发送的JSON有效。
  • $ Commit变量非常大,最多6000行。

2 个答案:

答案 0 :(得分:0)

我今天有同样的问题。我的身体中包含特殊的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 

答案 1 :(得分:0)

我试图做类似的事情来获取Wiki上的页面内容。有一个名为includeContent的标志,该标志自动默认为false,需要为true。

我的休息电话来自 https://dev.azure.com/{organization}/{project}/_apis/wiki/wikis/{wikiIdentifier}/pages?path={pagename}&?api-version=5.0

https://dev.azure.com/{organization}/{project}/_apis/wiki/wikis/{wikiIdentifier}/pages?path={pagename}&includeContent=True&?api-version=5.0