zoukankan      html  css  js  c++  java
  • ASP.NET 全局异常处理


    在我们写程序时偶尔会由于疏忽导致有些异常没有进行处理。如果将异常详细信息提示给用 户会带来不安全因素,如果不提示详细信息又会给用户报告异常带来麻烦。虽然可以通过配置customErrors mode来实现只有管理员可以查看错误,但发现问题的时间可能会比较长。通过全局异常处理就可以在异常发生时立即记录异常,或直接发送邮件向管理员报告, 以在最快的速度发现并处理异常。

    要为ASP.NET应用程序添加全局异常处理主要是添加HttpApplication的Error事件的处理。这与在BeginRequest事 件中进行URL重写方法类似。先建一个继承System.Web.IHttpModule的类。然后添加Init方法和ShowError方法。

    namespace Snowdream
    {

        
    public class HttpModule : System.Web.IHttpModule
        {

            
    public void Init(System.Web.HttpApplication context)
            {
                context.Error 
    += new EventHandler(ShowError);

            }

            
    private void ShowError(object sender, EventArgs e)
            {

                
    //在这里进行异常处理

            }
        }
    }

    然后还需要配置web.config的httpModules使之生效.

    我现在比较喜欢的做法是将异常的详细信息记录在数据库中,然后返回一个编号,再将页面重定向到自己写的错误提示页,将这个编号提示给用户,用户如果要报告错误只需提供该错误编号,管理员就能在后台中找到错误的详细信息并进行修改。

    下面说2个我在做全局异常处理时碰到的问题及我的解决方案

    第一个是获取异常hResult,由于是私有属性不能直接访问,解决方法是通过(int)System.Runtime.InteropServices.Marshal.GetHRForException(exception)来获取

    第二个问题是记录了很多不是由于ASP.NET应用程序引发的错误,比如用户键入一个错误的URL,异常处理系统会记录一个“文件不存 在。”的错误,而这些错误记录不仅不能真正反映出ASP.NET应用程序的异常反而会给管理员带来更多麻烦。我的解决方法是通过判断 if(exception is System.Web.HttpException)来过滤这些HttpException.

  • 相关阅读:
    HTML5 WebSocket 技术介绍
    腾迅平台接入笔记
    Windows 2008 R2 64位上安装wamp失败的原因
    海伦公式
    ANE接入平台心得记录(安卓)
    ANE原生代码的调试(安卓)
    一行代码远离Google浏览器兼容问题的困扰
    U3D的飞船太空射击例子中,使用coroutine
    这几天在搞UNITY3D,感觉回到了AS2
    网页动物园2.0发布,经过几个月的努力,采用JAVA编写!
  • 原文地址:https://www.cnblogs.com/zhangchenliang/p/2012817.html
Copyright © 2011-2022 走看看