• MVC 统一异常处理


    在出现异常时,我们不希望将错语的原因让客户看见,常常会做一个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异常处理就完成了。。。

  • 相关阅读:
    AX 2012 Form and Parts
    AX 2012 SSRS print setting-报表打印输出设置
    AX 2012 关于parts 添加
    AX Dynamic 2012 tabletype:TempDB使用
    AX Dynamic 2012 SSRS 按行数分页
    AX Dynamic 2012 SSRS autorepot中取当前公司名、打印时间、打印页码
    AX Dynamics 去中文字符长度:中文字符当2个字符处理
    AX dynamics 2012 ssrs 开发报错:Native compiler return value: ‘[BC30179]
    在Ubuntu 下编译c语言
    在ubuntu加载flash的方法
  • 原文地址:https://www.cnblogs.com/zhengwei-cq/p/8111231.html
Copyright © 2020-2023  润新知