您的位置:

system.net.webexception异常详解

一、webException的概念

System.Net.WebException类表示的是发生与http协议相关的错误时.NET Framework的异常。在.NET编程中,webException 是一种常见的异常,在开发过程中,我们需要了解该异常的性质及解决方式。

二、WebException的属性

WebException中有很多属性,下面我们一一介绍:

1. Response

获取与此异常关联的 WebResponse 实例。通常,如果发生异常,则没有有效的响应对象;在这种情况下,此属性返回 null。

try
{
   //创建WebRequest对象
   HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.contoso.com");

   //获取服务器响应
   HttpWebResponse resp = (HttpWebResponse)request.GetResponse();

   //关闭响应对象
   resp.Close();
}
catch(WebException ex)
{
   Console.WriteLine(ex.Response);
}

2. Status

获取导致异常的 WebExceptionStatus 的值。

try
{
   //创建WebRequest对象
   HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.contoso.com");

   //获取服务器响应
   HttpWebResponse resp = (HttpWebResponse)request.GetResponse();

   //关闭响应对象
   resp.Close();
}
catch(WebException ex)
{
   Console.WriteLine("Status: {0}", ex.Status);
}

3. Message

获取描述异常原因的消息。

try
{
   //创建WebRequest对象
   HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.contoso.com");

   //获取服务器响应
   HttpWebResponse resp = (HttpWebResponse)request.GetResponse();

   //关闭响应对象
   resp.Close();
}
catch(WebException ex)
{
   Console.WriteLine("Message: {0}", ex.Message);
}

三、WebException的处理方法

1. 使用try-catch捕获异常

在编写代码时,我们可以使用try-catch语句捕获WebException异常,并在catch语句块中处理异常。

try
{
   //创建WebRequest对象
   HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.contoso.com");

   //获取服务器响应
   HttpWebResponse resp = (HttpWebResponse)request.GetResponse();

   //关闭响应对象
   resp.Close();
}
catch(WebException ex)
{
   Console.WriteLine(ex.Message);
}

2. 判断异常类型处理异常

对于WebException异常,我们可以通过判断其Status属性的值来判断异常的类型,然后进行相应的处理。

try
{
   //创建WebRequest对象
   HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.contoso.com");

   //获取服务器响应
   HttpWebResponse resp = (HttpWebResponse)request.GetResponse();

   //关闭响应对象
   resp.Close();
}
catch(WebException ex)
{
   if(ex.Status == WebExceptionStatus.ConnectFailure)
   {
      Console.WriteLine("没有连接到服务器!");
   }
   else if(ex.Status == WebExceptionStatus.Timeout)
   {
      Console.WriteLine("超时!");
   }
   else
   {
      Console.WriteLine("其他错误!");
   }
}

3. 测试与调试

在编写代码时,我们需要不断测试和调试,查找潜在的问题。对于使用WebException异常时,我们需要特别关注以下几项:

1. 是否存在网络连通性问题;

2. 服务器是否正常运行;

3. 是否正确地指定了请求地址。

四、WebException示例

下面是一个使用WebException的示例:

try
{
   //创建WebRequest对象
   HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.contoso.com");

   //获取服务器响应
   HttpWebResponse resp = (HttpWebResponse)request.GetResponse();

   //关闭响应对象
   resp.Close();
}
catch(WebException ex)
{
   if(ex.Status == WebExceptionStatus.ConnectFailure)
   {
      Console.WriteLine("没有连接到服务器!");
   }
   else if(ex.Status == WebExceptionStatus.Timeout)
   {
      Console.WriteLine("超时!");
   }
   else
   {
      Console.WriteLine("其他错误!");
   }
}

参考资料:

1. MSDN: https://docs.microsoft.com/en-us/dotnet/api/system.net.webexception?view=netframework-4.8

2. CSDN: https://blog.csdn.net/weixin_43953584/article/details/108474318