哪些特定的状态码会导致HttpWebRequest.GetResponse()抛出WebException异常?

12

我找了一些关于此的权威文档,但并没有太大的成功。

HttpWebRequest.GetResponse() 在进行 POST 操作后,哪些 HTTP 响应状态码会生成 WebException

具体来说,在除了状态码为200 OK之外的情况下,它会生成一个 WebException 吗?还是仅在 400、404 和 500 这样的情况下才会生成一个 WebException(举例而言)?

我想知道,因为我正在通信的服务器将除了HTTP 200 OK以外的任何返回视为错误条件。我能否依赖于除 200 外的其他 HTTP 状态码会生成 WebException

我目前编写的代码每次都会检查返回的状态码是否为 200 OK。如果不是,它将采取适当的操作-但是在这段代码和捕获块中有很多重复的代码,我希望清理一下。

如有相关文档链接,将不胜感激。


请查看以下相关问题的答案,进行全面分析:https://dev59.com/MEvSa4cB1Zd3GeqPgbXb#2183380 - Steve Guidi
3个回答

3

在响应后进行明确的检查,捕获并检查WebExceptions; 这会导致一些重复的代码,但是没有确定答案表明如果状态不是200,就一定会发生WebException。


1

我认为它会,但这听起来是一个冒险的假设。首先,MSDN文档明确说明GetResponse除了WebException之外还会抛出其他异常。但是,从我的经验来看,“304 Not-Modified”响应将作为WebException抛出。

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


WebException本身被正确捕获并检查 - 问题在于如果getresponse方法不会生成WebException,而是在某些情况下简单地让事情继续进行(即从我所见的所有内容中,除非服务器发出HTTP 200 OK - 否则会弹出webexception...但在我看到的任何文档中都没有明确说明是否是这种情况...) - H. Morrow

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接