1

ASP.NET MVC:是否有过滤器可以知道控制器何时进入 catch 块?OnException 不起作用,因为它只是 4 个未处理的 ex。

4

1 回答 1

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();
        }

在此处输入图像描述

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

于 2012-11-09T13:38:41.353 回答