分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 软件开发

MVC 统一异常处理

发布时间:2023-09-06 01:32责任编辑:彭小芳关键词: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异常处理就完成了。。。

MVC 统一异常处理

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

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved