MVC继承Controller类并重写OnException方法实现全局错误日志

本文介绍了一种通过创建BaseController类实现统一异常处理的方法,并记录详细的错误日志到数据库中,适用于各种控制器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

记录错误日志是一个项目的重要部分,所以直接写一个BaseController来继承Controller就可以记录所有异常。

一、创建类BaseController.cs ,继承Controller类并重写OnException方法,代码如下

  public class BaseController : Controller
    {
        //记录异常
        protected override void OnException(ExceptionContext filterContext)
        {
            // 错误日志编写   
            string url = ""; 
            var exception = filterContext.Exception;
            if(exception==null)
            {
                return;
            }
            //如果是AJAX请求则返回JSON
            if(filterContext.HttpContext.Request.Headers["X-Requested-With"]== "XMLHttpRequest")
            {
                JsonResult j = new JsonResult();
                j = Json(Fail(exception.Message), JsonRequestBehavior.AllowGet);//Fail为自己定义的
                filterContext.Result = j;
            }
            else
            {
                string controllerNamer = filterContext.RouteData.Values["controller"].ToString().ToUpper();
                string actionName = filterContext.RouteData.Values["action"].ToString().ToUpper();
                url = controllerNamer + "/" + actionName;
            }
            var syslogsService = new SysLogsService();
            syslogsService.CreateSysLogs(LogLevel.Error, url+exception.Message, 0, Request.UserHostAddress, exception.StackTrace);//将日志写入数据库
            filterContext.ExceptionHandled = true;
            filterContext.HttpContext.Response.Clear();
            filterContext.HttpContext.Response.StatusCode = 500;
            filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;
            // 执行基类中的OnException    
            base.OnException(filterContext);
        }
}
二、所有控制器都可以继承Base

 public class AccountController : BaseController

在使用中有问题可以与我交流

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值