C#HttpWebRequest.GetResponse - 如何处理非异常与webexception响应的StatusCode用法?

时间:2010-02-02 07:51:15

标签: c# http httpwebrequest http-status-codes system.net.webexception

有人可以帮助清除HttpWebResponse和WebException中“StatusCode”属性的用法吗?

例如,似乎如果:

a)没有异常,那么HttpWebResponse将有一个StatusCode可能有一些值,表明两者:   - 成功(例如OK,Accepted etc)   - 失败(例如UseProxy,RequestTimeout等)

b)有一个WebExeption throw,它本身有一个响应对象,它还有一个StatusCode(我假设它基于相同的HttpStatusCode枚举。

问题1   - 在StatusCode将触发WebException(并且你会在异常中获取细节)方面是否存在任何一致性,相比之下,没有异常会返回,但是你会在响应的StatusCode中找到结果对象

问题2 - 或者更具体地说,尝试处理httpWebRequest.GetResponse调用的pseduo代码(或C#代码本身)是什么,以便您想要区分用户的响应类别:

  • 代理设置/代理问题 =>所以可以告诉用户修改代理设置

  • 连接问题/网络服务器关闭 =>所以用户知道这个

  • 服务器端错误(例如服务器在那里但处理请求时出现问题 - 例如内容不存在) =>所以用户可以通过网站管理员加注

  • 成功案例(我认为这不仅仅是OK) => na(成功案例)

感谢

2 个答案:

答案 0 :(得分:4)

根据我的经验,响应状态代码仅返回200或0.其他任何内容都来自WebException,包括代理错误,如407或417.

答案 1 :(得分:4)

只要无法成功执行Web请求,就会抛出WebException。例如400和500系列的回复。

WebExcpetion有一个名为Status的属性,它将返回响应的实际状态,即500(内部服务器错误)。

以下是所有回复代码的列表:http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

=============================================== ================================

一般来说:

1xx系列代码=临时响应。这些不是错误代码。例如,100继续响应,告诉客户端应继续其请求。通常,WebRequest不会返回此类响应,并通过发送剩余请求来自行处理。

2xx系列代码=请求已成功接收,理解和接受。这些不是错误代码。例如200 OK

3xx系列代码=需要采取进一步行动。通常这不是错误代码(通常用于重定向),例如'301 Moved Permanently',这意味着正在请求的资源被移动到新位置,因此客户端的任何进一步请求应该在提供的新URL上在回应中。

OR'305使用代理',根据您导致异常。

4xx系列代码=客户端错误。这些可能导致异常。例如'400 Bad Request'或'401 Unauthorized'

5xx系列代码=服务器错误。这些可能导致异常。例如'500内部服务器错误'或'504网关超时'