Powershell v3调用RestMethod头
我正在尝试对服务进行RestAPI调用,该服务在其文档中指定以下内容: 集成服务器可以以XML和JSON格式响应。在应用程序中使用以下接受标头之一 要求:Powershell v3调用RestMethod头,rest,powershell-3.0,Rest,Powershell 3.0,我正在尝试对服务进行RestAPI调用,该服务在其文档中指定以下内容: 集成服务器可以以XML和JSON格式响应。在应用程序中使用以下接受标头之一 要求: 接受:application/json,/ 接受:application/xml/ 如果accept标头不包括application/xml、application/json或/,则集成服务器将以“406 method not acceptable”状态代码响应 我的powershell代码如下所示 Invoke RestMethod-URI
Invoke RestMethod-URIhttps://URL/ticket -凭证$cred-Method Get-Headers@{“Accept”=“application/xml”}
但是我得到了与标题相关的以下错误:
Invoke RestMethod:必须使用适当的属性或方法修改此标头。
参数名称:名称
有人能帮助我理解为什么powershell不让我指定Accept标头吗?还是我还缺少另一种方法
谢谢我相信这个标题是受保护的,你应该在WebRequest中指定它。据了解,这是一个错误: 使用-ContentType的变通方法允许指定“application/xml”,但这无助于用户指定版本或通常在Accept头中找到的其他项 但它只在特定的场景下起作用。我不知道你想调用什么服务,所以我不能测试我的假设。< P>因为在PultBuSE V3中既没有,也没有考虑,下面的函数可以在某种程度上模拟<代码>调用REST方法< /> >:
Function Execute-Request()
{
Param(
[Parameter(Mandatory=$True)]
[string]$Url,
[Parameter(Mandatory=$False)]
[System.Net.ICredentials]$Credentials,
[Parameter(Mandatory=$False)]
[bool]$UseDefaultCredentials = $True,
[Parameter(Mandatory=$False)]
[Microsoft.PowerShell.Commands.WebRequestMethod]$Method = [Microsoft.PowerShell.Commands.WebRequestMethod]::Get,
[Parameter(Mandatory=$False)]
[Hashtable]$Header,
[Parameter(Mandatory=$False)]
[string]$ContentType
)
$client = New-Object System.Net.WebClient
if($Credentials) {
$client.Credentials = $Credentials
}
elseif($UseDefaultCredentials){
$client.Credentials = [System.Net.CredentialCache]::DefaultCredentials
}
if($ContentType) {
$client.Headers.Add("Content-Type", $ContentType)
}
if($Header) {
$Header.Keys | % { $client.Headers.Add($_, $Header.Item($_)) }
}
$data = $client.DownloadString($Url)
$client.Dispose()
return $data
}
示例:
Execute-Request -Url "https://URL/ticket" -UseDefaultCredentials $true
Execute-Request -Url "https://URL/ticket" -Credentials $credentials -Header @{"Accept" = "application/json"} -ContentType "application/json"
请注意,此错误已在较新版本的PowerShell中更正。