ASP.NET MVC ActionFilter

ozs*_*gal 2 c# asp.net asp.net-mvc action-filter

有人知道ActionFilterAttribute类中的OnResultExecuted方法是否在CATCH块中执行?

即:

        [CookiesActions]
        public ActionResult Login(Usuarios usuario)
[...]
            return View(new UsersViewModel(sceUsuarios.Usuario,true));
            }
            catch
            {
                return View(new UsersViewModel(new Usuarios(),true));//is OnResultExecuted fired here?
            }
[...]
Run Code Online (Sandbox Code Playgroud)

Pet*_*ter 10

简而言之:是的.

您可以使用简单的日志记录操作筛选器对此进行验证.

public class LogAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        Log("OnActionExecuting", filterContext.RouteData);
    }

    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        Log("OnActionExecuted", filterContext.RouteData);
    }

    public override void OnResultExecuting(ResultExecutingContext filterContext)
    {
        Log("OnResultExecuting", filterContext.RouteData);
    }

    public override void OnResultExecuted(ResultExecutedContext filterContext)
    {
        Log("OnResultExecuted", filterContext.RouteData);
    }


    private void Log(string methodName, RouteData routeData)
    {
        var controllerName = routeData.Values["controller"];
        var actionName = routeData.Values["action"];
        var message = String.Format("{0} controller:{1} action:{2}", methodName, controllerName, actionName);
        Debug.WriteLine(message, "Action Filter Log");
    }

}
Run Code Online (Sandbox Code Playgroud)

如果在方法上放置[Log]属性,即使吞下异常,也会看到OnResultExecuted被写入调试.