记录错误日志是一个项目的重要部分,所以直接写一个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
在使用中有问题可以与我交流