2013-08-16 29 views
5

我試圖讓RESTAPI呼叫指定在其服務的文檔如下:Powershell的V3調用-RestMethod頭

整合服務器可以在XML和JSON格式進行迴應。使用以下接受頭一個在你的 請求:

  1. 接受:應用/ JSON,/
  2. 接受:應用/ XML,/

如果Accept首部不包括應用/ XML,應用/ 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

只是注意這個錯誤有在更新版本的PowerShell中得到糾正。 –

回答

1

我相信這個頭是受保護的,你應該WebRequest中指定。據Microsoft Connect這是一個錯誤:

使用-Co​​ntentType的解決方法允許「應用程序/ XML」被指定但這並不能幫助用戶指定的版本或其他物品通常在接受頭髮現。

但它只適用於某些場景。我不知道你想要調用什麼服務,所以我無法測試我的假設。

3

由於Accept header could not be specified在PowerShell中V3既不Invoke-RestMethod也不Invoke-WebRequest,你可以考慮下面的函數模擬在一定程度上Invoke-RestMethod

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" 
相關問題