【问题标题】:ASP.NET ActionFilters and inheritanceASP.NET ActionFilters 和继承
【发布时间】:2010-07-16 19:50:56
【问题描述】:

我所有的控制器都继承自具有 ActionFilter 属性的 BaseController:

[AnalyticsData]
public class BaseController : Controller {}

public class AccountController : BaseController {}

我的控制器中的一些操作重用了 AnalyticsData ActionFilter:

public class AccountController : BaseController
{
    [AnalyticsData(Page="AccountProfile")]
    public ActionResult Profile()
    {
        // return View
    }
}

我注意到 AnalyticsData ActionFilter 只运行一次。这是一件好事,我只希望它运行一次,但我想知道这是怎么发生的。如果我在 OnActionExecuting 中设置断点:

public class AnalyticsAttribute : ActionFilterAttribute 
{
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            // break point set here
        }
}

...当 AccountController 为其提供 Profile 视图时,它只会被点击一次。

ActionFilters 和/或属性如何工作以使 Action 上的 [AnalyticsData(Page="AccountProfile")] 覆盖/替换 BaseController 上的 [AnalyticsData]?

【问题讨论】:

    标签: asp.net asp.net-mvc attributes action-filter


    【解决方案1】:

    简短的回答是,检索每个操作的过滤器列表的 ASP.NET MVC 框架代码会删除重复项(相同类型的操作过滤器),它更喜欢在操作方法上定义的操作过滤器而不是定义的操作过滤器在控制器(或其基类)上。在 MVC 2 中,此逻辑在 ActionDescriptor 类中的一些内部方法中执行

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-23
      • 2011-11-11
      • 2011-02-14
      • 1970-01-01
      • 2016-04-27
      • 1970-01-01
      相关资源
      最近更新 更多