首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASP.MVC ActionFilterAttribute OnActionExecuting未被触发

ASP.MVC ActionFilterAttribute OnActionExecuting未被触发
EN

Stack Overflow用户
提问于 2015-06-26 12:11:15
回答 1查看 4.4K关注 0票数 3

我有两个控制器Home

代码语言:javascript
复制
public class HomeController : Controller
    {
    protected override void OnActionExecuting(ActionExecutingContext filterContext)
            {
                // do some irrelevant stuff
                    base.OnActionExecuting(filterContext);           

            }

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

Service

代码语言:javascript
复制
public ActionResult Confirm()
            { return RedirectToAction("Index", "Home");}

和一个ActionFilterAttributeOnActionExecuting方法

代码语言:javascript
复制
 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之后发现这个?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2015-06-26 12:41:49

请参阅以获得更多的清晰度

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

代码语言:javascript
复制
public class HomeController : Controller
{
       [InvitationModeAttribute]
     public ActionResult Index()
     {            
        return View();
     }
 }

第二控制器

代码语言:javascript
复制
 public class ServiceController : Controller
 {
   [InvitationModeAttribute]
   public ActionResult Confirm()
   { 
     return RedirectToAction("Index", "Home");
   }
 }

来自MSDN

行动范围过滤器 除了使用操作筛选器标记单个操作方法外,还可以使用动作筛选器将控制器类作为一个整体进行标记。在这种情况下,过滤器适用于该控制器的所有操作方法。此外,如果您的控制器来自另一个控制器,则基本控制器可能有它自己的action-filter属性。同样,如果您的控制器重写了来自基本控制器的操作方法,则该方法可能具有自己的action-filter属性以及它从重写的action方法继承的属性。为了更容易地理解操作过滤器是如何一起工作的,操作方法被分组为作用域。作用域定义属性应用的位置,例如它是标记一个类还是一个方法,以及它是标记一个基类还是一个派生类。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31072880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档