如何将Global ActionFilter应用于所有控制器并返回Result?

时间:2012-07-30 13:00:44

标签: c# asp.net .net asp.net-mvc-3 global-filter

如何正确应用全局操作过滤器以便在所有操作上触发,然后返回触发过滤器的自定义操作结果?我将提供迄今为止我所做的事情的例子,但无法触发 filterContext.Result = ...

Global.asax中

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    filters.Add(new HandleErrorAttribute());
    filters.Add(new RequestCounter());
}

public class RequestCounter : ActionFilterAttribute
{

    public override void OnResultExecuted(ActionExecutingContext filterContext)
    {  
          if (!LogCounter())
          {
               if (!filterContext.IsChildAction)
               {
                   var values = new RouteValueDictionary(new
                   {
                       controller = "Account",
                       action = "LogOff"
                   });

                   filterContext.Result = new RedirectToRouteResult(values);

                   //--> Here, the action is not redirected to LogOff method,
                   //    the goal is to logoff user, program just continues???
               }
          }

          base.OnResultExecuted(filterContext);
     }
}

如何正确地重定向到LogOff()方法,从这个上下文,使用Result或其他方式?谢谢!

1 个答案:

答案 0 :(得分:1)

根据类似问题的answer,您需要将Area参数分配给空字符串,例如

var values = new RouteValueDictionary(new
{
    controller = "Account",
    action = "LogOff",
    area = ""
});