ASP.NET页面错误处理

页面级错误

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>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值