C# ASP.NET MVC筛选所有异常(包括已处理的异常)

C# ASP.NET MVC筛选所有异常(包括已处理的异常),c#,asp.net-mvc,asp.net-mvc-3,c#-3.0,C#,Asp.net Mvc,Asp.net Mvc 3,C# 3.0,ASP.NET MVC:当控制器进入catch块时,是否有一个过滤器可以知道?OneException不起作用,因为它只有4个未处理的实例。您可以编写自己的属性,该属性派生自ActionFilterAttribute public class LogExceptionAttribute : ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext filter

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

您可以编写自己的属性,该属性派生自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);
        }
    }
然后将属性放在操作/控制器上,或将其注册到全局.asax
ApplicationStart()
中作为全局筛选器

示例:

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


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

除非您从catch块中重新抛出异常,否则不会。它只适用于未处理的异常(我应该重新抛出异常以使其生效)。