我有两个控制器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之后发现这个?
谢谢
发布于 2015-06-26 12:41:49
请参阅这以获得更多的清晰度
首先,删除控制器级别上的OnActionExecuting方法
public class HomeController : Controller
{
[InvitationModeAttribute]
public ActionResult Index()
{
return View();
}
}第二控制器
public class ServiceController : Controller
{
[InvitationModeAttribute]
public ActionResult Confirm()
{
return RedirectToAction("Index", "Home");
}
}来自MSDN
行动范围过滤器 除了使用操作筛选器标记单个操作方法外,还可以使用动作筛选器将控制器类作为一个整体进行标记。在这种情况下,过滤器适用于该控制器的所有操作方法。此外,如果您的控制器来自另一个控制器,则基本控制器可能有它自己的action-filter属性。同样,如果您的控制器重写了来自基本控制器的操作方法,则该方法可能具有自己的action-filter属性以及它从重写的action方法继承的属性。为了更容易地理解操作过滤器是如何一起工作的,操作方法被分组为作用域。作用域定义属性应用的位置,例如它是标记一个类还是一个方法,以及它是标记一个基类还是一个派生类。
https://stackoverflow.com/questions/31072880
复制相似问题