码迷,mamicode.com
首页 > Web开发 > 详细

MVC 统一异常处理

时间:2017-12-25 21:27:42      阅读:214      评论:0      收藏:0      [点我收藏+]

标签:http   异常处理   为我   完成   redirect   thread   rri   start   过滤   

在出现异常时,我们不希望将错语的原因让客户看见,常常会做一个404错误页面,将所有发生的异常都跳至该页面,并把异常信息写在日志中。步骤如下:

1、让我们看看Global.asax页面Application_Start()方法中有FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);

protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            WebApiConfig.Register(GlobalConfiguration.Configuration);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
            AuthConfig.RegisterAuth();
}

2、F12,进去该方法中,为我们的自定义的异常处理器注册

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {

            filters.Add(new MyExceptionAttribute()); //自定义过滤器
        }

3、添加类文件MyExceptionAttribute 开始写们我们自定义的类,注意,这里要继承我们mvc的异常处理类HandleErrorAttribute,在这个类中我们定义了一个队列,这个队列就是用来

     存放异常信息的。并在适当的时间将这些异常信息写入日志中,在哪里进行写入呢,请往下看。

public class MyExceptionAttribute : HandleErrorAttribute
    {
        /// <summary>
        /// 捕获控制器方法中的异常
        /// </summary>
        /// <param name="filterContext"></param>
        public override void OnException(ExceptionContext filterContext)
        {
            exceptionQueue.Enqueue(filterContext.Exception);
            filterContext.HttpContext.Response.Redirect("/error.html");
            //base.OnException(filterContext);
        }
        public static Queue<Exception> exceptionQueue = new Queue<Exception>();
    }

4、同样我们在Application_Start()开启一个线程来将队列中的信息写信到日志中

 

System.Threading.ThreadPool.QueueUserWorkItem(a => {
                while (true)
                {
                    if (MyExceptionAttribute.exceptionQueue.Count() > 0)
                    {
                        Exception ex = MyExceptionAttribute.exceptionQueue.Dequeue();
                        if (ex != null)
                        {
                            LogService.ErrorOperationString(ex.ToString());
                        }
                        else
                        {
                            System.Threading.Thread.Sleep(9000);
                        }

                    }
                    else
                    {
                        System.Threading.Thread.Sleep(9000);
                    }
                }

            }); 

 

至此一个完整的mvc异常处理就完成了。。。

 

MVC 统一异常处理

标签:http   异常处理   为我   完成   redirect   thread   rri   start   过滤   

原文地址:https://www.cnblogs.com/zhengwei-cq/p/8111231.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!