asp.net错误处理的三种方法

本文介绍ASP.NET中的多种错误处理方式,包括使用<customErrors>配置元素自定义错误页面,利用Application_Error事件处理未捕获异常,以及通过ErrorPage属性进行错误页设置。

以前有过一篇博文asp.net--一个错误页面的处理,主要是出错时调至错误页面,然后将当前出错的页面存入Session,然后执行刷新等操作,该机制主要用于程序员自己控制错误,但是有些错误和异常是程序员无法控制的,比如:

  • 网络不可用
  • 服务器崩溃
  • 服务器超负荷
  • 客户端请求的页面不存在或者没有权限
  • 服务器出现了不可预知的异常,而该异常却没有被catch

  这些错误的结果都会导致无法为客户端提供服务,作为程序员,有责任将用户请求重定向至自定义的错误页面;今天学习了一下,做个记录:

一、<system.web>配置元素和<customErrors>配置元素

ContractedBlock.gif ExpandedBlockStart.gif 代码

   
< system.web >


< customErrors mode ="RemoteOnly" defaultRedirect ="GenericErrorPage.htm" >
< error statusCode ="403" redirect ="NoAccess.htm" />
< error statusCode ="404" redirect ="FileNotFound.htm" />
</ customErrors >

</ system.web >

  <customErrors>元素的defautRedirect属性指向的页面是发生错误时指向远程用户的默认页面,通过配置<error>子节点可以将错误按照错误的类型redirect用户至特定的错误页面。

  mode属性有三个,分别为:

  • RemoteOnly,自定义的错误页面只发送给远程用户,当在服务器本地操作时,发生错误时,程序还是会返回红条或者黄条,返回详细的错误信息;
  • On,不管远程客户还是服务器本地客户发生错误,都会调至自定义的错误页面;
  • Off,完全禁用这个错误服务,不管远程用户还是本地用户,当程序发生错误时,都会返回令人恶心的错误详细信息。

  这三个属性是大小写敏感的,第一个字母必须为大写。

二、Application_Error事件

  当异常未被捕获的时候,ASP.NET就会触发HttpApplication类的Error事件,可以通过Global.asax文件的Application_Error方法来订阅该事件。

ContractedBlock.gif ExpandedBlockStart.gif 代码

   

void Application_Error( object sender, EventArgs e)
{
// 在出现未处理的错误时运行的代码
HttpUnhandledException eHttp = this .Server.GetLastError() as HttpUnhandledException;
Exception eApp
= eHttp.InnerException; // 可以返回异常
Response.Redirect( " Default3.aspx?exe=' " + Server.UrlEncode(eApp.Message) + " ' " );
Server.ClearError();
Response.End();

}

执行完毕后应该调用ClearError方法。

三、ErrorPage属性

  在页面的处理过程中,可以在任何时候设置或者获取Page.ErrorPage属性,能够通过程序的方式指定异常未被捕获的时候,ASP.NET会将客户端重定向至那个页面。这个有两种设置方法,一个是直接在page属性里面设置,为某个页面设置统一的错误页面。

 


  
<% @ Page Language = " C# " ErrorPage ="~/Default2.aspx" AutoEventWireup = " true "
CodeFile = " Default.aspx.cs " Inherits = " _Default " %>

也可以在程序中动态的设置,加入页面有n多button可以为每一个button设置特定的ErrorPage


  
protected void btnTest_Click( object sender, EventArgs e)
{
this .ErrorPage = " Default2.aspx " ;
}

 

该属性是和<customErrors>配置元素配合才会起作用的。为了使Page.ErrorPage 起作用,<customErrors>的mode属性必须设置为On。

  在异常为被捕获的时候,如果这个属性值为null(没有设置ErrorPage),那么HttpApplication.Error事件。如果HttpApplication.Error没有订阅错误事件,那么程序会去找<customErrors>配置的元素(如果可以的话)。

优先级:ErrorPage属性、Application_Error,<customErrors>配置,如果多个处理错误的机制同时存在,应用程序会按照优先级找到第一个满足条件的错误机制。

 

 

 

 

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值