Asp.Net捕获未处理异常

Asp.Net中的Application_Start不知道是在哪里绑定的,没有找到源,所以不清楚到底应该在哪去绑定,今天无意间总算明白了……

打开Global.asax文件,其中有一个MvcApplication类继承自:System.Web.HttpApplication

观察HttpApplication发现,里面有一个Error的事件:

public event EventHandler Error;

解释为:当引发未经处理的异常时发生。

好吧,看样子就是这货了

MvcApplication中有一个默认的Application_Start方法,既然是继承自HttpApplication,那么在Start时给MvcApplication绑定一个事件就可以了,但是,问题又绕回来了,不知道是在哪初始化的,想了半天才想明白,我是2了……:

this.Error += MvcApplication_Error;

看样子这两天要多吃点猪脑子补补了……最近两天老是脑子短路

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http;
using System.Web.Mvc;
using System.Web.Routing;
using bjSoftware.BLL;

namespace JointOfficialWinFormDataHelp
{
    // Note: For instructions on enabling IIS6 or IIS7 classic mode, 
    // visit http://go.microsoft.com/?LinkId=9394801
    public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();

            WebApiConfig.Register(GlobalConfiguration.Configuration);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            this.Error += MvcApplication_Error;
        }

        void MvcApplication_Error(object sender, EventArgs e)
        {
            //返回前一个异常。
            Exception ex = Server.GetLastError();
            //获取导致当前异常的 System.Exception 实例。
            Exception innerException = ex.InnerException;
            bjSoftware.Model.Logs log = new bjSoftware.Model.Logs();
            if (innerException != null)
            {
                log.Text = innerException.ToString();
            }
            else
            {
                log.Text = ex.ToString();
            }
            new bjSoftware.BLL.Logs().Add(log);
            //清除前一个异常
            Server.ClearError();
        }
    }
}

 

 

 

12 Replies to “Asp.Net捕获未处理异常”

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据