相关疑难解决方法(0)

如何正确处理WebResponse实例?

通常,使用WebRequest编写类似这样的代码来下载一些数据.

using(WebResponse resp = request.GetResponse())  // WebRequest request...
   using(Stream str = resp.GetResponseStream())  
      ; // do something with the stream str
Run Code Online (Sandbox Code Playgroud)

现在,如果抛出WebException,WebException会引用WebResponse对象,该对象可能会或可能不会调用Dispose(取决于发生异常的位置,或者响应类的实现方式) - 我不知道.

我的问题是如何处理这个问题.是否应该编写一个非常防御性的编码,并在WebException对象中处理响应(这有点奇怪,因为WebException不是IDisposable).或者是否应该忽略这一点,可能访问已处置的对象或从不处置IDisposable对象?WebException.Response的MSDN文档中给出的示例完全不合适.

.net c# idisposable webresponse

21
推荐指数
2
解决办法
9586
查看次数

WebException.Response.GetResponseStream()应该关闭/处理吗?

当我抓到.NET时WebException,我应该关闭/处理Response.GetResponseStream()

MSDN示例不会关闭或异常处理任何事情.

许多SO 答案建议处理响应和/或流.

我处理了流,这引起了很大的问题.因为GetResponseStream()(总是?/有时?)返回相同的实例.因此,当我获得响应流然后处理它时,可能会将异常重新抛出到另一个层,该层也会获得响应流,它将被处理掉并且不可读并因此而抛出更多异常.

.net c# idisposable httpwebresponse webexception

7
推荐指数
2
解决办法
1473
查看次数

当服务器返回状态代码400时,使用powershell检索响应内容

所以我通过powershell调用一个休息Web服务,如果你试图发布已经处理过的数据,它会响应一个400状态代码,以及状态代码它还会返回一个JSON响应:

{
    "statusCode": 400,
    "errorCode": "REQUEST_VALIDATION_ERROR",
    "message": "validation failed",
    "developerMessage": " MessageId-xxx already processed. No Need to process again."
}
Run Code Online (Sandbox Code Playgroud)

所以我尝试用一​​些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
    }
Run Code Online (Sandbox Code Playgroud)

当我发送$_.Exception.response给Get-Member时,我可以看到没有内容属性.如何使用PowerShell访问响应中的消息?

powershell web-services

3
推荐指数
1
解决办法
1984
查看次数