ASP.NET异常处理

本文介绍了ASP.NET中的异常处理策略,包括过程级别、页面级别及应用程序级别的异常捕获方法,并详细展示了Page_Error与Application_Error事件的处理过程。同时,还讲解了如何通过Web.config配置文件中的错误页设置来优雅地处理未捕获的异常。
摘要由CSDN通过智能技术生成

异常捕获,是我们在Coding过程中必须要考虑的。除了使用Try Catch语句之外,更积极的策略是,对于由输入可能引发的异常在输入时就进行验证。

ASP.NET开发中,可以把异常分成几个层次:过程级别/页面级别或类级别/应用程序级别。我们通常会在过程级别就采取措施来捕获异常并处理,以避免

异常向上扩散。过程级别的异常是会向上冒泡至页面级别,页面级别的异常也会冒泡至应用程序级别。

在ASP.NET的架构中,对于页面级别的异常和应用程序级别的异常都提供了捕获机制。

  • 页面级别可以通过Page_error事件处理过程进行捕获:

public void Page_Error(object sender,EventArgs e)
{
 Exception bjErr = Server.GetLastError().GetBaseException();
 string err = "Error Caught in Page_Error event



" +
   "
Error in:" + Request.Url.ToString() +
   "
Error Message:" + objErr.Message.ToString()+
   "
Stack Trace:
" +
                   objErr.StackTrace.ToString();
 Response.Write(err.ToString());
 Server.ClearError();
}

 

  • 应用程序级别可以通过Application_error事件处理过程进行捕获:

protected void Application_Error(object sender, EventArgs e)
{
 Exception bjErr = Server.GetLastError().GetBaseException();
 string err = "Error Caught in Application_Error event\n" +
   "Error in:" + Request.Url.ToString() +
   "\nError Message:"+ objErr.Message.ToString() +
   "\nStack Trace:"+ objErr.StackTrace.ToString();
 EventLog.WriteEntry("Sample_WebApp",err,EventLogEntryType.Error);
 Server.ClearError();
 //additional actions...
}

 

注意:Server.ClearError()的作用是把异常从当前层次中销毁,避免继续上向扩散。

 

如果在页面级别和应用程序级别,异常还是没有被捕获。最终将引发应用程序错误,这时ASP.NET运行时会采取最后一个步骤来使得程序

异常能以尽可能友好的方式通知客户端使用者,那就是检查Web.config中配置节,如果配置了错误页,就自动把响应

导向所配置的错误页。

http://hostName/applicationName/errorStatus.htm" mode="On">

注意:mode属性有三个可选值:

On:未被处理的异常将用户重定向到指定的 defaultRedirect 页。此模式主要用于生产。
Off:用户收到异常信息而不是被重定向到 defaultRedirect 页。此模式主要用于开发。
RemoteOnly:只有在本地计算机上访问该站点的用户(通过使用 localhost)才能收到异常信息。所有其他用户都被重定向到 defaultRedirect 页。此模式主要用于调试。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12639172/viewspace-631506/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/12639172/viewspace-631506/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值