一、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