`

ASP.NET的错误处理机制

阅读更多

        对于一个Web应用程序来说,出错是在所难免的,因此我们应该未雨绸缪,为可能出现的错误提供恰当的处理。事实上,良好的错误处理机制正是衡量Web应用程序好坏的一个重要标准。试想一下,当用户不小心在浏览器输入了错误的URL或者当用户提供了一些信息导致程序出错的时候,如果我们没有对这些情况进行处理,而是任由404或是500的错误页面甚至出错的堆栈信息呈现在用户面前,这无疑会把一些用户给吓跑。所以,在我们开发Web应用程序的时候,应该对错误处理机制有充分的了解。
   
        让我们回到ASP.NET上来,先提两个问题让大家思考一下:ASP.NET为我们提供了几种错误处理机制呢?如果同时采用了几种错误处理机制,它们之间是否存在一定的优先级呢?带着这个问题,我们先来看一下我们最常见的Web.Config文件:

<?xml version="1.0"?>
    
<configuration>
        
<system.web>
            
<customErrors mode="On" defaultRedirect="GenericErrorPage.htm">
                
<error statusCode="403" redirect="Error403.htm" />
                
<error statusCode="404" redirect="Error404.htm" />  
            
</customErrors>
        
</system.web>
    
</configuration>


对于<customErrors>这个设置项,我想无需多言了,详情可以参考MSDN的。第一种错误处理机制——使用Web.Config的<customErrors>配置项应该是大家最常用的。
        接着,我们再看另外一个也很常用的文件:Global.asax。提到这个文件,大家想到了什么呢?对,就是跟两大Web应用程序对象(Application、Session)相关的事件了。在这些事件当中,有一个属于Application范畴的与错误相关的事件——Error,而对应的事件处理方法就是Application_Error了。顾名思义,这个事件处理方法在应用程序级别错误发生的时候就会被调用,因此你可以在这个方法中添加代码来对错误进行处理,如下所示:

protected void Application_Error(object sender, EventArgs e) {
    Exception objErr 
= Server.GetLastError().GetBaseException();
    Response.Write(
"Error:" + objErr.Message);
    Server.ClearError();
}


在这里,大家要注意最后一句代码Server.ClearError()的使用,为什么要使用这句代码呢?如果不用又会怎样呢?在这里我又先卖个关子。好了,第二种错误处理机制——使用Global.asax中的Application_Error事件处理方法也登台亮相了。

        以上这两种错误处理方法都可以说是全局性的,一个源自应用程序配置文件,一个则是必须放在应用程序根目录下的Global.asax文件的事件处理方法。与全局相对的就是局部,所以我们很自然的就会想:有没有应用于局部——某个页面的错误处理机制呢?答案是“有的”,而且还有两种————使用ErrorPage属性以及使用Page_Error事件处理方法。对于第一种机制,你几乎可以在任何时候设置ErrorPage属性,从而确定页面发生错误的时候会重定向至哪个页面;对于第二种机制而言,它与Application_Error事件处理方法是很类似的,只不过被触发的时机不同而已。以下是具体的两个例子:

<script language="C#" runat="server">
    
protected void Page_Load(object sender, EventArgs e) {
        
this.ErrorPage = "ErrorPage.htm";
        
    }
   
</script>

 

protected void Page_Error(object sender, EventArgs e) {
    Exception objErr 
= Server.GetLastError().GetBaseException();
    Response.Write(
"Error:" + objErr.Message);
    Server.ClearError(); 
//同样要注意这句代码的使用
}
    


        至此,四种错误处理机制已经悉数登场,是时候给它们排个名次了。根据优先级从高到低排序:Page_Error事件处理方法 > ErrorPage属性 > Application_Error事件处理方法 >  <customErrors>配置项。虽然排序是这样,但是这个排序之间又有微妙的关系。首先,要让ErrorPage属性能够发挥作用,<customErrors>配置项中的mode属性必须设为"On";其次,虽然Page_Error事件处理方法排在最前面,但是,如果少掉了Server.ClearError()方法的话,仍然会引发优先级较低的错误处理,也就是说ErrorPage属性等错误处理机制仍然会发挥作用,这样就得不到你想要的结果了。这种情况对于Application_Error事件处理方法也是如此。顺序是排好了,但是顺序却不是最重要的问题,甚至可以说是没有太多意义的问题,因为在很多情况下,你可能并不会混合使用这四种处理机制。我想,最重要的问题还是在如何选用这些错误处理机制上。对于这个问题,希望有经验的朋友能够谈谈看法。
   
        好了,关于ASP.NET的四种错误处理机制就介绍到这里,也该说说自己的一些感受了。ASP.NET的设计者确实站在开发者的角度作了周全的考虑,因此提供了多达四种的错误处理机制供我们选用,这一点是值得称道的。但是套用一句广告词——多则惑,我们也会被这么多的错误处理机制弄得有些头晕。对照J2EE领域中的错误处理,我们可以发现会相对简单一些。首先是对应<customErrors>的设置,我们也可以从J2EE项目最常用的web.xml文件中找到类似的配置项:<errorPage>;其次,在J2EE的领域中,Page并不是一个重要的实体而且事件驱动模型也不是必需的,所以我还真的找不到与Application_Error和Page_Error方法对应的处理机制;最后,在J2EE的领域中,更多强调的是Request和Response,一旦在逻辑处理中出现了错误,我们可以很容易地通过RequestDispatcher将Request分发到相应的错误处理模块中,事实上这是非常灵活的一种处理方式,有兴趣的朋友不妨了解一下。

分享到:
评论

相关推荐

    web错误统一处理 ASP.NET的错误处理机制

    5. **ELMAH(Error Logging Modules and Handlers)**:这是一款开源的ASP.NET错误日志记录组件,它可以自动捕获、记录和显示ASP.NET应用程序的未处理异常。ELMAH不仅记录错误,还提供了一个Web界面供开发者查看和...

    ASP.NET错误机制的处理附源码

    ASP.NET错误机制是微软开发的Web应用程序框架ASP.NET中的一个重要组成部分,它允许开发者优雅地处理可能出现的异常和错误,提供了一种系统化的方式来捕获、记录和响应运行时的错误。错误处理对于任何Web应用程序都是...

    asp.net 的错误处理机制讲解

    ASP.NET 错误处理机制讲解 ASP.NET 错误处理机制是指在 ASP.NET 应用程序中处理和捕捉错误的机制。错误处理机制是程序健壮性的最基本要求之一。在 ASP.NET 中,错误处理机制有多种方式,可以使用 Try…Catch…...

    asp.net 异常处理跳转自定义错误页面Demo

    首先,我们需要理解ASP.NET中的异常处理机制。当应用程序运行时遇到无法恢复的错误,会抛出一个异常。默认情况下,ASP.NET会显示一个不太友好的错误页面,这对于生产环境来说并不理想。因此,我们需要捕获这些异常,...

    ASP.NET 3.5 网站开发实例教程

    9. **调试与错误处理**:学习使用Visual Studio进行调试,理解ASP.NET错误处理机制,包括自定义错误页和异常处理。 10. **最佳实践**:介绍Web开发中的设计原则和最佳实践,如代码分离、MVC模式和依赖注入,以提高...

    《庖丁解牛ASP.NET控件组件开发》光盘示例源代码

    8. 错误处理与调试:学习如何使用Visual Studio 2008的调试工具来定位和修复代码错误,以及如何配置ASP.NET错误处理机制,如Global.asax文件中的Application_Error事件。 9. 性能优化:可能涉及减少回发、缓存策略...

    asp.net如何使用错误提醒控件

    错误提醒控件是ASP.NET中的一种可视化组件,它能够以用户友好的方式显示错误信息,而不是默认的ASP.NET错误页。一种常见的错误提醒控件是`ValidationSummary`控件。`ValidationSummary`用于显示验证失败时的所有验证...

    ASP.NET 高级排错技巧

    三、理解并利用ASP.NET错误处理机制 ASP.NET 提供了内置的错误处理机制,如Global.asax文件中的Application_Error事件,可以在全局范围内捕获未处理的异常。结合HttpModule,可以在更细粒度级别进行错误处理。同时...

    asp.net 实例源码

    5. 错误处理:使用Global.asax文件设置全局错误处理,捕获并处理运行时异常,提高系统的稳定性和用户体验。 6. AJAX技术:可能使用UpdatePanel或jQuery AJAX来实现部分页面更新,提高用户体验,如即时显示答题结果...

    使用ASP.NET技术开发网上书店(ASP.NET)

    ASP.NET提供了强大的错误处理机制,包括Global.asax文件中的错误处理,以及Visual Studio的调试工具,帮助开发者快速定位和修复问题。 10. **部署和性能优化**: 最后,了解IIS服务器配置、发布和部署流程,以及...

    ASP.NET文件参考 asp.net asp.net技巧

    ASP.NET的安全特性包括身份验证、授权和错误处理。Forms Authentication用于用户登录验证,角色基础的授权可以控制用户对特定资源的访问。异常处理机制确保程序在遇到错误时能提供有用的信息,同时保护应用程序不被...

    asp.net大作业

    10. **错误处理和日志记录**:为了提高系统的稳定性和可维护性,开发者通常会实现错误处理和日志记录机制,以便在出现问题时进行排查。 综上所述,【ASP.NET大作业】涵盖了ASP.NET Web应用程序开发的多个方面,从...

    asp.net 扫描二维码

    7. **错误处理**:设计良好的错误处理机制,确保在用户没有启用摄像头或者二维码扫描失败时,能给出友好的提示。 在ASP.NET项目中,你可能还需要使用NuGet包来支持与JavaScript库的交互,例如`Newtonsoft.Json`用于...

    asp.net宝典/asp.net

    3. **控件与事件处理**:ASP.NET Web Forms提供了丰富的服务器控件,如按钮、文本框、表格等,它们支持事件驱动编程,理解控件的工作方式和事件处理机制至关重要。 4. **数据绑定**:学习如何使用ASP.NET的数据绑定...

    asp.net网站模板

    通过自定义这些事件,可以实现应用程序级别的初始化、错误处理等功能。 2. `admin_config.aspx`:通常,这代表一个后台管理配置页面,用于设置或修改网站的一些配置参数。在ASP.NET中,开发者可以通过这样的页面来...

    asp.net 后台管理系统界面

    ASP.NET 提供的身份验证和授权机制可以帮助我们实现这一目标。 7. **错误处理与日志记录**: 异常处理和日志记录是任何后台系统的必要组成部分。ASP.NET 提供了全局异常处理和日志记录接口,开发者可以自定义实现...

    asp.net校园音乐吧

    9. **错误处理与调试**:一个完整的项目通常会包含错误处理机制,如全局异常处理,帮助开发者追踪和修复问题。 10. **部署与发布**:项目完成后,需要将其部署到IIS服务器上,这涉及到发布设置、配置管理和服务器...

    ASP.NET教程 ASP.NET教程

    8. **缓存(Caching)**:ASP.NET提供了强大的缓存机制,可以提高应用程序性能,减少数据库压力。 9. ** membership 和角色管理**:为网站用户提供身份验证和授权功能,便于管理用户权限。 10. **ASP.NET AJAX**:...

Global site tag (gtag.js) - Google Analytics