在Mvc里面我们知道有自带的Filter方法,也就是我们说的Aop横向切面编程
首先自定义 CustomeFilterAttribute类,继承FilterAttribute方法,同时继承IExceptionFilter接口
(还可以继承 IActionFilter, IAuthorizationFilter IResultFilter等接口),然后实现OnException方法
先看代码:
public class CustomeFilterAttribute : FilterAttribute, IExceptionFilter {
public void OnException(ExceptionContext filterContext)
{
//ErrLog路径
string path = HttpContext.Current.Server.MapPath("/Logs/ErrLogs.txt");
//出错时间
string ErrTime = DateTime.Now.ToString();
//错误类型
string ErrType = filterContext.Exception.GetType().ToString();
//错误信息
string ErrMessage = filterContext.Exception.Message;
//引发异常的方法
string targetsite = filterContext.Exception.TargetSite.ToString();
//引发异常的对象
string source = filterContext.Exception.Source.ToString();
//异常Controller名称
string controller = filterContext.RouteData.Values["controller"].ToString();
//异常Action名称
string action = filterContext.RouteData.Values["action"].ToString();
string ErrStr = string.Format("时间:{0} ,错误类型:{0},错误信息:{2},异常的方法:{3},异常的对象:{4},Controller名称:{5},Action名称:{6}", ErrTime, ErrType, ErrMessage, targetsite, source, controller, action); WriteLog(path, true, ErrStr);
}
private void WriteLog(string path, bool append, string ErrStr)
{
StreamWriter writer = new StreamWriter(path, append);
writer.WriteLine(ErrStr);
writer.Flush();
writer.Dispose();
}
}
现在已经实现写Err的方法了,接下来看如何捕捉Err。
我们要自定义一个BaseController
[CustomeFilter]
public class BaseController : Controller
{
public BaseController()
{
}
}
然后让所有你写的Controller都继承BaseController,就实现捕捉异常了