为啥 System.Net.Browser.ClientHttpWebRequest 访问无效服务器地址时返回 404?
Posted
技术标签:
【中文标题】为啥 System.Net.Browser.ClientHttpWebRequest 访问无效服务器地址时返回 404?【英文标题】:Why does System.Net.Browser.ClientHttpWebRequest return 404 when accessing invalid server address?为什么 System.Net.Browser.ClientHttpWebRequest 访问无效服务器地址时返回 404? 【发布时间】:2014-03-13 19:44:32 【问题描述】:当访问没有服务器运行的无效 IP 地址时,Microsoft System.Net.Browser.ClientHttpWebRequest 似乎抛出了一个状态代码为 NotFound 的 WebException,这对应于服务器的 404 响应。正确的响应不是 HTTP 状态代码,也绝对不在 400 范围内,因为客户端库从来没有机会与有效的 HTTP 服务器对话。这对我的代码来说是有问题的,因为 404 在我的服务器端点返回时具有特殊含义。
有没有办法确定服务器何时实际返回 404 (NotFound) 响应,以及何时被错误地用于描述 System.Net.Browser.ClientHttpWebRequest 类的一般连接故障?
请注意,我在 WP8 上会发生这种行为。
【问题讨论】:
我已经能够在我的一个应用程序中使用HttpClient
处理这种特定情况,方法是检查错误附带的原因短语(如果它是空的,那么它很可能是连接问题)。我不知道是否可以用HttpWebRequest
做同样的事情。
您的互联网服务提供商会这样做。它的 DNS 服务器将您重定向到他们拥有的垃圾页面。在您的网络浏览器中尝试http://1.1.1.1
以查看同一页面。寻找更好的 ISP 或将 DNS 地址更改为 8.8.8.8
【参考方案1】:
我遇到了同样的问题,捕获 System.Net.WebException 并在 catch 语句中插入以下代码行使我能够获得服务器返回的实际响应:
catch(System.Net.WebException we)
using (var streamResponse = we.Response.GetResponseStream())
using (var streamRead = new StreamReader(streamResponse))
string responseString = streamRead.ReadToEnd();
// do something with responseString
【讨论】:
以上是关于为啥 System.Net.Browser.ClientHttpWebRequest 访问无效服务器地址时返回 404?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 DataGridView 上的 DoubleBuffered 属性默认为 false,为啥它受到保护?