.NET [MVC] 利用特性捕捉异常
声明:本代码只适用于.NET MVC.
先创建一个类继承ActionFilterAttribute这个抽象类以及实现IExceptionFilter接口,并实现它的方法OnException。
代码如下:
using FrameWork.Common; using System.Web; using System.Web.Mvc; namespace FrameWork.Web { public class ErrorHandleAttribute : ActionFilterAttribute, IExceptionFilter { /// <summary> /// 异常 /// </summary> public void OnException(ExceptionContext filterContext) { //获取异常信息,入库保存 var error = filterContext.Exception; var message = error.Message;//错误信息 var url = HttpContext.Current.Request.RawUrl;//错误发生地址 var controllerName = filterContext.RouteData.Values["controller"].ToString(); var actionName = filterContext.RouteData.Values["action"].ToString(); var exception = filterContext.Exception.ToString(); Log4NetHelp.Error("出错位置:" + url, filterContext.Exception); filterContext.HttpContext.Response.Redirect("/Account/Login");//否则跳转至登陆页 } } }
如何使用呢?
只需要在需要捕捉异常的控制器加上[ErrorHandle]即可。
例如:
[ErrorHandle] public abstract class AdminControllerBase : Controller { //代码逻辑 }
如果继承AdminControllerBase或者带有[ErrorHandle]特性的类和方法出现了错误,都会执行OnException方法,
然后写上自己的异常处理逻辑即可。