我正在尝试对服务进行RestAPI调用,该服务在其文档中指定了以下内容:
Integration Server可以以XML和JSON格式进行响应。在您的中使用以下接受标题之一 请求:
- 接受:application / json, / 。
- 接受:application / xml, /
醇>如果accept标头不包含application / xml,application / json或 / ,则集成服务器将使用“406方法不可接受”状态代码进行响应。
我的powershell代码看起来像这样
Invoke-RestMethod -URI https://URL/ticket -Credential $cred -Method Get -Headers @{"Accept"="application/xml"}
但是我收到与标题有关的以下错误:
Invoke-RestMethod : This header must be modified using the appropriate property or method.
Parameter name: name
有人可以帮助我理解为什么powershell不会让我指定Accept标头吗?或者我在这里缺少另一种方法吗?
由于
答案 0 :(得分:7)
自PowerShell V3中的Accept
header could not be specified和Invoke-RestMethod Invoke-WebRequest起,您可以考虑以下在某种程度上模拟的函数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"
示例:
var app = express();
var myfunc = require('./script');
myfunc.test('This is a test')
答案 1 :(得分:1)
我相信这个标题是受保护的,您应该在WebRequest中指定它。根据{{3}},这是一个错误:
使用-ContentType的变通方法允许指定'application / xml',但这不能帮助用户指定通常在Accept标头中找到的版本或其他项。
但它只适用于某种情况。我不知道你试图调用什么服务,所以我无法测试我的假设。