所有异常的ASP.NET MVC过滤器(包含已处理)

时间:2012-11-09 13:24:24

标签: c# asp.net-mvc asp.net-mvc-3 c#-3.0

ASP.NET MVC:是否有一个过滤器来了解控制器何时进入catch块? OnException无法正常工作,因为它只是4个未处理的ex。

1 个答案:

答案 0 :(得分:0)

您可以编写自己的属性,该属性派生自 ActionFilterAttribute

public class LogExceptionAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
                base.OnActionExecuting(filterContext);
        }

        public override void OnActionExecuted(ActionExecutedContext filterContext)
        {
                //here you can inspect filterContext for exceptions
                base.OnActionExecuted(filterContext);
        }

        public override void OnResultExecuting(ResultExecutingContext filterContext)
        {
            base.OnResultExecuting(filterContext);
        }

        public override void OnResultExecuted(ResultExecutedContext filterContext)
        {
            base.OnResultExecuted(filterContext);
        }
    }

然后将该属性放在动作/控制器上,或将其注册在 Global.asax ApplicationStart()作为全局过滤器。

示例:

 [LogException]
        public ActionResult Index()
        {
            throw new Exception();
            return View();
        }

enter image description here

这将使您能够记录异常或执行其他操作。