我想使用HttpWebRequest来验证Url的存在。我发现,这样做基本上这几个例子:为什么HttpWebRequest会抛出异常而不是返回HttpStatusCode.NotFound?
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(Url);
request.Method = "HEAD";
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
return response.StatusCode;
}
然而,如果该网址是否确实坏了,它不返回响应,它的而不是抛出异常。
我修改我的代码如下:
try
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(Url);
request.Method = "HEAD";
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
return response.StatusCode;
}
}
catch (System.Net.WebException ex)
{
var response = ex.Response as HttpWebResponse;
return response == null ? HttpStatusCode.InternalServerError : response.StatusCode;
}
这似乎终于做我想做的。
但我想知道,为什么请求会抛出一个异常,而不是返回带有NotFound状态码的响应?
虽然这是使用HttpWebRequest/Response从.Net Framework作者的部分上的这个糟糕的设计选择保存代码的最少工作,但正确的解决方案是使用HttpClient,它不会抛出4xx和5xx状态代码。例外情况是针对特殊情况的,抛出只是为了抓住它,并继续进行,就好像这样对于性能来说是丑陋和不好的,尤其是考虑到有一个更好的选项可以完全避免它。 https://msdn.microsoft.com/en-us/library/hh138242(v=vs.118).aspx – 2015-06-22 22:58:38
这似乎不是真的;我在一个项目中使用HttpClient,当调用一个不存在的url并返回一个404状态码时,客户端抛出一个异常而不是返回404状态码的响应。使用httpclient来防止这种情况有额外的步骤吗? – SelAromDotNet 2017-04-12 17:17:15