2016-04-08 102 views
0

下面是从Internet URI源获取Http Web响应的C#代码片段。 当客户端无法获得响应时,它会引发异常。
我很想知道是否有任何条件没有发生异常 但HttpStatusCode不正确(即不是范围200-299)。在HttpRequest.GetResponse中抛出异常

基本上我需要知道什么是不引发异常的不良状态码。

try{ 
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
catch{} 
+0

不能完全确定你所定义的那些'重新问,但是当你捕捉到它并且什么都不做时,它永远不会抛出异常(实际上忽略所有异常)。您在GetReponse行之后也丢失了一个右大括号。您可以在[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes)上看到状态代码列表 – Tone

回答

2

4xx范围的任何状态代码被定义为一个客户机错误,将导致ProtocolException。 (400-错误请求,401-未经授权等)
5xx范围内的任何结果都被定义为服务器错误,并且将导致CommunicationException。 (500-内部服务器错误,502-错误网关等)。

例如,如果要实施重试机制,这非常有用。如果例外是CommunicationException,因为这可能是一个瞬时错误(连接失败,DNS解析失败),但是如果例外是ProtocolException,那么重试是有意义的,然后重试是多余的,因为它应该总是失败。

无论任何其他状态代码被认为是一个错误的情况下或不依赖于客户端和服务器,但上面的合同是由HTTP标准

List of HTTP status codes

+0

3xx范围内的状态代码如何? – user334223

+0

3xx是重定向并且是有效的非错误响应(不会抛出异常)。如果'AllowAutoRedirect'设置为true,那么这将是透明的,你的请求将被转发到重定向位置。如果它设置为false,那么你可以决定如何处理来自服务器的重定向响应。如果在你的情况下重定向不是预期的结果,并且被认为是错误,你可以这样处理,虽然通常情况并非如此 – Itsik