关于c#:HttpWebRequest抛出“ 404远程服务器返回错误:(404)未找到。”

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)找不到。"

为什么HttpWebRequest引发异常; 以及我如何使其停止?

或者

有人可以建议一种方法或.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
        };
    }
}