这是一个我很困惑的一般问题。我以为一旦发出REST请求,就会通过WebException
返回错误。在一种情况下,我收到了HttpRequestException
,它不允许我获取HTTP状态代码。
我是新手,但是这些有什么区别?为什么有两种类型?一个人什么时候习惯而不是另一个?WebException
似乎运行良好。 HttpRequestException
似乎是它的一个很弱的版本,它知道状态代码(在消息中),但不会明确告诉我它是什么。
编辑:
我正在使用HttpClient
。具体调用client.GetStreamAsync()
。
最佳答案
共有三种不同的故障情况:
a)您无法连接到服务器或代理,在这种情况下会抛出HttpRequestException。请注意,如果服务器已关闭且正在运行 fiddler ,则永远不会看到此异常,您将获得5XX状态代码。
b)读/写网络流时,您会得到IOException中断。
c)您将返回带有HttpStatusCode和4XX/5XX状态码的响应。如果您的客户端应用程序选择调用response.EnsureSuccessStatusCode(),则将抛出HttpRequestException。
如果您决定调用SecureSuccessStatusCode,则您将做出一个明确的决定,即您不关心状态代码,除了它是否成功。
如果您确实需要冒出一个异常,然后再处理状态代码,那么建议您创建自己的扩展方法来替换“SureSuccessStatusCode”,并创建自己的可以存储状态代码的异常。或者最好根据您要采取的纠正措施将状态代码转换为几种不同的异常之一。