因此,我正在通过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
}
当我发送$_.Exception.response
给Get-Member时,我可以看到没有content属性。如何使用Powershell在响应中访问消息?
您可以通过从ErrorDetails属性访问内容消息$_.ErrorDetails.Message
。它返回一个字符串。
作为替代,你也可以直接读取使用WebResponse类类流$_.Exception.Response.GetResponseStream()
(如描述在这里,我不得不把流位置0再次,因为它似乎已经由PowerShell中读取)
$s = $_.Exception.Response.GetResponseStream()
$s.Position = 0;
$sr = New-Object System.IO.StreamReader($s)
$err = $sr.ReadToEnd()
$sr.Close()
$s.Close()
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句