ASP.NET页面错误处理

发表于:2012-7-03 10:45

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:八神吻你(cnblogs)    来源:51Testing软件测试网采编

  ASP.NET应用可以再代码中利用异常捕获来处理错误(try、catch)但是应用出现的所有错误,都用异常捕获来处理是一种不良的编程习惯。try、catch使用简单,但是过度使用会导致严重的性能损失。如果能检测可能出现不预期情况,应该尽量使用其他方法,而将异常捕获作为最后考虑的手段,异常捕获是NET官方提供应用程序处理工具。如果ASP.NET应用程序出现异常,运行时会试图寻找有意捕获它的代码块,异常会在栈中下上遍历,直到抵达当前应用程序的起始层,如果在这期间没有找到合适的处理程序,该异常便成为未处理异常,并使CLR抛出系统异常,用户会看见报黄页,应用程序也会随即终止。

  默认的错误页面用户在本地和远程计算机看到的典型错误页面是不一样的。

  本地用户会看到相对详细的错误信息,远程用户接收到的信息不会那么详细。主要是出于安全方面考虑。

  ASP.NET提供了两级全局拦截点,分别位于页面级和应用程序级,帮助我们以编程的方法处理错误。基于基类Page暴露了Error事件,我们可以在页面中重写它,捕获页面执行期间引发的未处理异常。同样,HttpApplication类中也有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();
}

  通过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>

21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号