【发布时间】:2017-10-19 21:07:50
【问题描述】:
我有一个向多个 API 发送请求的 c# 应用程序,但今天早些时候其中一个似乎关闭了一段时间,并在我的异常处理程序中引发了异常:
catch (WebException e)
{
var statusCode = ((HttpWebResponse)e.Response).StatusCode;
//Use status code and exception for reporting and handling.
}
这导致了一个问题,因为当时异常没有Response,所以我试图获取什么都没有的StatusCode,并且抛出了NullPointerException。
我已经把它改成了这个,以便在没有响应时尝试获取状态码(我没有将响应用于状态码以外的任何东西)。
catch (WebException e)
{
//Try to get the status code from the exception, can fail somehow.
HttpStatusCode statusCode;
try
{
statusCode = (HttpStatusCode)e.Status;
}
catch(Exception innerE)
{
//Capture exceptions for logging
//...
//Set a default code to continue.
statusCode = HttpStatusCode.InternalServerError;
}
//Use status code and exception for reporting and handling.
}
从this answer 看来,您可以同时尝试响应中的状态和异常中的状态。
我的问题是我是否应该同时尝试两者,或者是否应该将一个设置在另一个之上?
例如,为了测试我现在使用的代码,我能够手动抛出一个 WebException,只显示状态而没有响应。
是否有任何情况下我会得到没有异常状态的响应?或者,是否存在响应中的状态代码更详细或与直接来自异常本身的状态代码不同的情况?
我正在使用基本的HttpWebRequest 拨打电话。
更新:
我无法控制与之交互的 API,直到今天发生故障,我才发现可以返回而没有响应。我手动将其设置为 500,以便在 catch 块中进一步处理我自己的错误,我的用户不知道这是我使用的。我只是在问一种检索 StatusCode 的方式是否比另一种方式更好/不同。或者,如果我不应该依赖一种方法而不是另一种方法,是否应该同时尝试两种方法以及更喜欢哪种方法?
【问题讨论】:
标签: c# asp.net-mvc system.net.webexception