【问题标题】:Which specific status codes cause a WebException to be thrown by HttpWebRequest.GetResponse()?哪些特定的状态码会导致 HttpWebRequest.GetResponse() 抛出 WebException?
【发布时间】:2011-02-26 03:12:31
【问题描述】:

我已经四处寻找有关这方面的一些权威文档,但没有找到任何运气。

在执行 POST 之类的操作后,HttpWebRequest.GetResponse() 将针对哪些 HTTP 响应状态代码生成 WebException

具体来说,它是否会为状态200 OK 以外的任何内容生成WebException?或者它只会生成一个WebException 来表示 400、404 和 500(为了争论)?

我想知道,因为与我通信的服务器定义了除 HTTP 200 OK 以外的任何内容作为错误条件返回。我可以依靠为 200 以外的任何东西生成 WebException 吗?

我目前已经编写了代码来每次检查返回状态代码并确保它是200 OK。如果不是,它会采取适当的措施——但该代码和 WebException 的 catch 块之间有很多重复,我希望清理这些重复。

任何相关的文档链接将不胜感激。

【问题讨论】:

标签: c# httpwebrequest system.net.webexception


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我认为它会,但这听起来像是一个冒险的假设。一方面,MSDN docs 明确表示GetResponse 将抛出除WebException 之外的异常。但是,根据经验,我可以肯定地说“304 Not-Modified”响应将被抛出为WebException

    所有这些谈话都散发出一股奇怪的代码气味;不要使用异常来控制执行流程。您最好适当地处理异常,然后明确检查 StatusCode 属性的允许值。

    【讨论】:

    • WebException 本身被正确捕获并检查 - 但是问题是如果 getresponse 方法不生成 WebException 而是简单地让事情在某些情况下继续进行(即从我所看到的一切,除非服务器发出 HTTP 200 OK - 弹出一个 web 异常......但在我见过的任何文档中都没有确定是否是这种情况......)
    【解决方案3】:

    WebException 系统是来自HTTP error systemseperate system。 这主要是因为 HTTP 错误是由浏览器或客户端返回的,而 WebException 是由服务器在构建页面时抛出的。当发现 HTTP 错误时,页面已发送到客户端,而您不会知道它。

    【讨论】:

      猜你喜欢
      • 2017-10-19
      • 2021-02-11
      • 1970-01-01
      • 1970-01-01
      • 2019-04-03
      • 1970-01-01
      • 2010-11-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多