异常捕获,是我们在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/