ASP MVC ActionFilterAttribute OnActionExecuting未触发

时间:2015-06-26 12:11:15

标签: c# asp.net asp.net-mvc redirecttoaction actionfilterattribute

我有2个控制器Home

public class HomeController : Controller
    {
    protected override void OnActionExecuting(ActionExecutingContext filterContext)
            {
                // do some irrelevant stuff
                    base.OnActionExecuting(filterContext);           

            }

    public ActionResult Index()
            {            
                    return View();
            }
}

Service

public ActionResult Confirm()
            { return RedirectToAction("Index", "Home");}

一个ActionFilterAttribute使用OnActionExecuting方法

 public class InvitationModeAttribute : ActionFilterAttribute
    {
     public override void OnActionExecuting(ActionExecutingContext filterContext)
            {
               // do some stuff

                base.OnActionExecuting(filterContext);
            }
}

public class FilterConfig
    {
        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {            
            filters.Add(new InvitationModeAttribute());
        }
    }

当我转到localhost/Service/Confirm时,会OnActionExecuting被触发,但是当调用RedirectToAction时,OnActionExecuting不会被触发。 我怎样才能在RedirectToAction之后发现这个?

由于

1 个答案:

答案 0 :(得分:1)

参考https://dev.mysql.com/doc/refman/5.6/en/connection-access.html更清晰

首先 删除控制器级别中的OnActionExecuting方法

mysql> GRANT ... TO rajivratn@localhost ...;

第二控制器

public class HomeController : Controller
{
       [InvitationModeAttribute]
     public ActionResult Index()
     {            
        return View();
     }
 }

来自MSDN

  

行动范围过滤器

     

除了用动作标记个人动作方法   过滤器,您可以使用操作将控制器类标记为整体   过滤。在这种情况下,过滤器适用于该过滤器的所有操作方法   控制器。此外,如果您的控制器来自另一个   控制器,基本控制器可能有自己的动作过滤器   属性。同样,如果您的控制器覆盖了一个动作方法   从基本控制器,该方法可能有自己的动作过滤器   属性以及它从重写的操作方法继承的属性。至   让动作更容易理解动作过滤器如何协同工作   方法分为范围。范围定义属性的位置   适用,例如它是标记类还是方法,以及是否标记   标记基类或派生类。