C#HttpWebRequest.GetResponse – 如何处理非exception与webexception响应的StatusCode用法?

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

例如,似乎如果:

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

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

问题1 – 在StatusCode将触发WebException的情况下是否存在任何一致性(并且您将在exception中获取详细信息),相比之下没有exception会返回但是您会在StatusCode中找到结果响应对象?

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

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

  • 连接问题/ web-server down =>所以用户意识到这一点

  • 服务器端错误(例如服务器在那里但是处理请求时存在问题 – 例如内容不存在)=>因此用户可以通过网站管理员加薪

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

谢谢

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

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

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

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

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

一般来说:

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

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

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

或’305使用代理’,根据您导致exception。

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

5xx系列代码=服务器错误。 这些可能导致exception。 例如’500 Internal Server Error’或’504 Gateway Timeout’