代码之家  ›  专栏  ›  技术社区  ›  Ian Boyd

对于404,HttpWebRequest抛出“远程服务器返回错误:(404)找不到”

  •  0
  • Ian Boyd  · 技术社区  · 6 年前

    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();
       }
    }
    

    问题是这条线:

    request.GetResponse();
    

    引发异常:

    • System.Net.HttpWebResponse

    为什么是 HttpWebRequest 抛出一个异常;我如何让它停止?

    或者

    有人能推荐一个方法或.NET类,它 让我与一个web服务器对话,并检索 404

    HttpClient 有自己的 issues 把它排除在考虑之外。

    0 回复  |  直到 6 年前
        1
  •  0
  •   Merkle Groot    6 年前

    下面是我之前编写的一些代码,欢迎您使用它们来处理这个场景。 如果抛出异常,您可以通过捕捉WebException来获取状态代码。

    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
            };
        }
    }