ASP MVC ActionFilterAttribute OnActionExecuting not fired

本文关键字:not fired OnActionExecuting ActionFilterAttribute MVC ASP | 更新日期: 2023-09-27 18:00:07

我有两个带的控制器Home

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

和具有的CCD_ 2

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

和一个ActionFilterAttributeOnActionExecuting方法

 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之后,我如何才能捕捉到它?

感谢

ASP MVC ActionFilterAttribute OnActionExecuting not fired

请参阅此以获得更清晰的

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

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

第二控制器

 public class ServiceController : Controller
 {
   [InvitationModeAttribute]
   public ActionResult Confirm()
   { 
     return RedirectToAction("Index", "Home");
   }
 }

来自MSDN

行动范围过滤器

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