我想使用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