Powershell v3 Invoke-RestMethod标题

时间:2013-08-16 17:29:35

标签: rest powershell-v3.0

我正在尝试对服务进行RestAPI调用,该服务在其文档中指定了以下内容:

  

Integration Server可以以XML和JSON格式进行响应。在您的中使用以下接受标题之一   请求:

     
      
  1. 接受:application / json, /
  2.   
  3. 接受:application / xml, /
  4.         

    如果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标头吗?或者我在这里缺少另一种方法吗?

由于

2 个答案:

答案 0 :(得分:7)

自PowerShell V3中的Accept header could not be specifiedInvoke-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}},这是一个错误:

  

使用-Co​​ntentType的变通方法允许指定'application / xml',但这不能帮助用户指定通常在Accept标头中找到的版本或其他项。

但它只适用于某种情况。我不知道你试图调用什么服务,所以我无法测试我的假设。