所以我通过powershell调用一个rest web服务,如果你试图发布已经处理过的数据,它会响应一个400状态代码,以及状态代码它还会返回一个JSON响应:
{
"statusCode": 400,
"errorCode": "REQUEST_VALIDATION_ERROR",
"message": "validation failed",
"developerMessage": " MessageId-xxx already processed. No Need to process again."
}
所以我尝试用一些powershell调用它并接收400状态代码并使用try / catch来处理这个以获取异常,但是响应中没有内容,我可以获得响应头,状态代码,状态消息等,但我找不到一种方法来访问JSON响应,这是我正在使用的powershell代码的格式:
$url = "https://example.com/webservice/status"
$cert = Get-ChildItem Cert:\CurrentUser\My\certthumbprintxxxxx
$headers = @{"tokenId" = "tokenxxxxx"}
$body =
@"
{
...
JSON data...
...
}
"@
try
{
$response = Invoke-WebRequest $url -Certificate $cert -Headers $headers -Method Post -Body $body
}
catch
{
$_.Exception.response
}
当我向Get-Member发送$_.Exception.response
时,我发现没有内容属性。如何使用powershell访问响应中的消息?
答案 0 :(得分:5)
您可以通过$_.ErrorDetails.Message
从ErrorDetails属性访问内容消息。它返回一个字符串。
作为替代方案,您也可以使用$_.Exception.Response.GetResponseStream()
直接从WebResponse类中读取流(如上所述here,我不得不再次将流放到位置0,因为它似乎已被读取的powershell)
$s = $_.Exception.Response.GetResponseStream()
$s.Position = 0;
$sr = New-Object System.IO.StreamReader($s)
$err = $sr.ReadToEnd()
$sr.Close()
$s.Close()