Asp.net MVC 自定义异常处理类
using ElegantWM.Common; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using ElegantWM.Factory; using System.Data.SqlClient; namespace ElegantWM.WebUI { public class ExceptionHandler : HandleErrorAttribute { public static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); public override void OnException(ExceptionContext filterContext) { Exception Error = filterContext.Exception; while (Error.InnerException != null) { Error = Error.InnerException; } //获取出现异常的controller名和action名,用于记录 string controllerName = (string)filterContext.RouteData.Values["controller"]; string actionName = (string)filterContext.RouteData.Values["action"]; string Message = Error.GetType().Name + ":" + Error.Message;//错误信息 string Url = HttpContext.Current.Request.RawUrl;//错误发生地址 log.Error("URL=" + Url + ";Msg=" + Message, Error); filterContext.ExceptionHandled = true; if (filterContext.HttpContext.Request.IsAjaxRequest()) { filterContext.Result = new JsonResult { Data = ResultMsg.Failure(Message), JsonRequestBehavior = JsonRequestBehavior.AllowGet }; } else { //定义一个HandErrorInfo,用于Error页使用 HandleErrorInfo model = new HandleErrorInfo(Error, controllerName, actionName); //ViewResult是ActionResult,经常出现在controller中action方法return后面,但是出现形式是View() ViewResult result = new ViewResult { ViewName = this.View, MasterName = this.Master, //定义ViewData,使用的是泛型 ViewData = new ViewDataDictionary<HandleErrorInfo>(model), TempData = filterContext.Controller.TempData }; filterContext.Result = result; filterContext.HttpContext.Response.Clear(); filterContext.HttpContext.Response.StatusCode = 500; filterContext.HttpContext.Response.TrySkipIisCustomErrors = true; } base.OnException(filterContext); } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架