页面级错误
protected override void OnError(EventArgs e)
{
Exception ex = Server.GetLastError();
if(ex is NotImplementedException)
Server.Transfer("errorpages/notImplemented.aspx");
else
Server.Transfer("errorpages/apperror.aspx");
Server.ClearError();
}
通过Server对象的GetLastError方法,我们获得被引发的异常。然后传到特定的页面,展示给用户。最后一旦异常处理完成,应用调用ClearError清楚错误。
全局错误处理
页面的Error事件处理能够捕获特定页面的错误,如果要使组合应用程序的所有页面共享一套错误处理代码,我们可以在应用程序级创建一段全局错误处理程序,便可捕获所有未处理异常。实现几乎和页面级的错误处理程序一样,只不过处理的是代表整个应用程序的HttpApplication对象中的Error事件,为此,我们需要将global.asax文件添加到程序中,并定义Application_Error方法:
protected override void OnError(EventArgs e)
{
Exception ex = Server.GetLastError();
if(ex is NotImplementedException)
Server.Transfer("errorpages/notImplemented.aspx");
else
Server.Transfer("errorpages/apperror.aspx");
Server.ClearError();
}
错误的页面映射
当未处理异常抵达调用栈末端时,ASP.NET会报黄页,但是我们还可以通过使用应用程序Web.Config文件中的<customErrors>区段,可以对这个功能进行充分的控制。
<configuration>
<system.web>
<customErrors mode="Off">
</customErrors>
</system.web>
</configuration>
mode属性用于决定错误消息是启动、关闭还是只显示给远程客户端。
当mode设为RemoteOnly时,远程用户会收到一般性的错误提示页面,而本地可以得到详细的错误信息。
当mode设为off时,本地和远程用户都会显示包含详细错误的页面。
可以自定义错误页面
<configuration>
<system.web>
<customErrors mode="Off" defaultRedirect="GenericErrorPage.htm">
</customErrors>
</system.web>
</configuration>
如果mode为on时,本地和远程都将会把defaultRedirect="GenericErrorPage.htm"页面来代替原来的错误报黄页面,为用户展示友好的错误提示,大多数自定义的错误页面时纯HTML编写的。
常见的HTTP错误处理
ASP.NET还使我们能够针对发生的不同HTTP错误显示相应的自定义页面。错误页面和特定HTTP状态之间的映射,可以定义在<customErrors>区段,设置<error>标签,将HTTP状态码
和自定义错误页面关联起来:
<configuration>
<system.web>
<customErrors mode="Off" defaultRedirect="GenericErrorPage.htm">
<error statusCode="403" redirect="NoAccess.htm"/>
<error statusCode="404" redirect="FileNotFound.htm"/>
</customErrors>
</system.web>
</configuration>