HttpWebRequest.GetResponse() – 哪些特定的状态代码会引发exception?

我一直在寻找一些关于此的明确文件,但没有找到任何运气。

基本上 – 问题是 – 从服务器返回的HTTP状态代码将HttpWebRequest.GetResponse()在执行类似的事情之后生成WebException吗?

具体来说 – 它会为状态200以外的任何其他内容生成WebException吗? 或者它只会生成一个WebException,例如400,404和500(为了参数)。

我想知道,因为我正在与之通信的服务器定义除了HTTP 200之外的其他任何东西作为错误条件返回 – 关键是,我可以依赖为200以外的任何其他东西生成WebException吗? (我现在编写了我的代码,以便它实际上每次检查返回状态代码以确保它是200 OK,如果不是,请采取适当的措施 – 但它之间有很多重复,以及WebException的catch块,我希望能把它清理干净……)

任何与文档相关的链接都将非常受欢迎。

谢谢!

WebException系统是来自HTTP错误系统的 独立 系统 。 这主要是因为浏览器或客户端返回了HTTP错误,并且在构建页面时服务器抛出了WebException。 当发现HTTP错误时,页面将被发送到客户端,您将不会知道它。

在响应和捕获并检查WebExceptions之后结束执行显式检查; 导致一些重复的代码,但如果状态为非200,是否总是会发生WebException没有确定的答案。

我认为它会,但这听起来像是一个冒险的假设。 首先, MSDN文档清楚地表明GetResponse将抛出除WebException之外的exception。 但是,我可以从经验中明确地说,“304 Not-Modified”响应将作为WebException抛出。

所有这些谈话都散发出一股狡猾的Code Smell; 不要使用exception来控制执行流程。 您最好适当地处理exception,然后显式检查StatusCode属性以获取允许的值。