WebRequest和响应的错误处理

时间:2018-08-26 22:26:49

标签: c# http httpwebresponse

我当前正在运行一个采用字符串(域名)并检查站点是否可用并将信息传递到我创建的Domain对象中的方法。当前,我遇到一个问题,其中一个站点已关闭,进而使应用程序崩溃。方法如下:

private Domain GetStatus(string x)
    {
        string status = "";

        WebRequest req = HttpWebRequest.Create("http://www." + x);
        WebResponse res = req.GetResponse();
        HttpWebResponse response = (HttpWebResponse)res;
        if ((int)response.StatusCode > 226 || response.StatusCode == HttpStatusCode.NotFound)
        {
            status = "ERROR: " + response.StatusCode.ToString();
        }
        else
        {
            status = "LIVE";
        }

        Domain temp = new Domain(x, status);
        return temp;
    }

最初的想法是response.StatusCode == HttpStatusCode.NotFound将处理这样的错误,但当前它正在WebResponse res = req.GetResponse();行崩溃。响应如下:

System.Net.WebException: 'The remote name could not be resolved: 'www.DOMAIN.com''

2 个答案:

答案 0 :(得分:1)

该问题是由于您自己的代码引发了异常。

这可能是由于缺少Internet连接或dns解决问题(可能是由远程用户引起的)。

因此,如果远程服务器抛出错误,则无法访问,将得到HTTP 500 Internal Server Error;您的代码将引发异常,您将需要处理该异常。

要解决此问题,您可以使用try/catch块,如下所示:

private Domain GetStatus(string x)
{
    string status = "";

    try
    {    
         WebRequest req = HttpWebRequest.Create("http://www." + x);
         WebResponse res = req.GetResponse();
         HttpWebResponse response = (HttpWebResponse)res;
         if ((int)response.StatusCode > 226 || 
             response.StatusCode ==  HttpStatusCode.NotFound)
         {
             status = "ERROR: " + response.StatusCode.ToString();
         }
         else
         {
             status = "LIVE";
         }
     }
     catch (Exception e)
     {
          status = "ERROR: Something bad happend: " + e.ToString();
     }

     Domain temp = new Domain(x, status);
     return temp;
}


顺便说一句,

  

无法解析远程名称

指示无法解析主机。

最可能的原因是您的Internet断开,域拼写错误或到域的路由出现故障(例如,在Intranet环境中)。

答案 1 :(得分:1)

HttpWebRequest都是关于HTTP协议的,这是一种商定的语言

但是,如果另一端的人不存在,那么您应该如何期望他向您返回“ Hello”呢?

因此StatusCode实际上仅是有关实际远程站点是否响应,响应状态根据请求资源是什么,是否为Success(200)?找不到(404)?未经授权(401)等。

异常表示,由于多种原因,我无法到达该站点。 StatusCode表示您请求的资源已返回此响应类型。

但是,如果对站点是否存在进行更实际的检查,是否正在查询静态页面且没有异常,则进行更健康的检查,将查询静态页面,您将始终被视为“健康”。意思是将返回200 OK响应。

所以这一切取决于 LIVE 对您(或使用它的客户)意味着什么。

是远程主机实际上正在接收请求,意味着没有异常。 或实际上,这意味着,他能够获取请求并向我返回我希望他返回的有效StatusCode响应(健康)。