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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!