ASP.NET MVC ActionFilter [英] ASP.NET MVC ActionFilter

查看:133
本文介绍了ASP.NET MVC ActionFilter的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果是否即使在catch块执行从ActionFilterAttribute类OnResultExecuted方法有人知道?

例如:

  [CookiesActions]
        公众的ActionResult登录(USUARIOS usuario)
[...]
            返回查看(新UsersViewModel(sceUsuarios.Usuario,真实));
            }
            抓住
            {
                返回查看(新UsersViewModel(新USUARIOS(),TRUE)); //在这里OnResultExecuted解雇了吗?
            }
[...]


解决方案

在短:

您可以用一个简单的日志记录动作过滤器验证这一点。

 公共类LogAttribute:ActionFilterAttribute
{
    公共覆盖无效OnActionExecuting(ActionExecutingContext filterContext)
    {
        日志(OnActionExecuting,filterContext.RouteData);
    }    公共覆盖无效OnActionExecuted(ActionExecutedContext filterContext)
    {
        日志(OnActionExecuted,filterContext.RouteData);
    }    公共覆盖无效OnResultExecuting(ResultExecutingContext filterContext)
    {
        日志(OnResultExecuting,filterContext.RouteData);
    }    公共覆盖无效OnResultExecuted(ResultExecutedContext filterContext)
    {
        日志(OnResultExecuted,filterContext.RouteData);
    }
    私人无效日志(字符串methodName中,的RouteData的RouteData)
    {
        VAR controllerName = routeData.Values​​ [控制器];
        VAR actionName = routeData.Values​​ [行动];
        VAR消息=的String.Format({0}控制器:{1}行动:{2},方法名,controllerName,actionName);
        的Debug.WriteLine(消息,行动过滤日志);
    }}

如果你把[日志]属性上你的方法,你会看到OnResultExecuted写入甚至当你吞下例外调试。

Does anybody knows if the OnResultExecuted method from ActionFilterAttribute class is executed even in CATCH block?

ie:

        [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?
            }
[...]

解决方案

In short: YES.

You can verify this with a a simple logging action filter.

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

}

If you put the [Log] attribute on your method, you'll see that OnResultExecuted is written to debug even when you swallow the exception.

这篇关于ASP.NET MVC ActionFilter的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆