HttpWebRequest throws “The remote server returned an error: (404) Not Found.” for 404
我正在尝试发出网络请求:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | String url = @"http://stackoverflow.com/aaaaaaaa.html"; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); String responseText; using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) { if (response.StatusCode == HttpStatusCode.NotFound) //404 return""; using (StreamReader responseStream = new StreamReader(response.GetResponseStream())) { responseText = responseStream.ReadToEnd(); } } |
问题是该行:
1 | request.GetResponse(); |
引发异常:
-
System.Net.HttpWebResponse
- "远程服务器返回错误:(404)找不到。"
为什么
或者
有人可以建议一种方法或.NET类,该方法或类可以让我与网络服务器进行通讯,并检索完全有效的但并不例外的404。
HttpClient有其自身的问题,因此无需考虑。
这是我之前编写的一些代码,欢迎您使用该代码处理这种情况。
如果引发异常,则可以通过捕获WebException来获取状态代码。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | public class WebResult { public string Response { get; set; } public bool WasSuccessful { get; set; } public HttpStatusCode? StatusCode { get; set; } } public WebResult GetUrlContents(string url) { try { var request = (HttpWebRequest)WebRequest.Create(url); using (var response = (HttpWebResponse)request.GetResponse()) using (var responseStream = new StreamReader(response.GetResponseStream())) { return new WebResult { WasSuccessful = true, Response = responseStream.ReadToEnd(), StatusCode = response.StatusCode }; } } catch (WebException webException) { return new WebResult { Response = null, WasSuccessful = false, StatusCode = (webException.Response as HttpWebResponse)?.StatusCode }; } } |