ASP.NET ActionFilters和继承
我的所有控制器都继承自具有ActionFilter属性的BaseController:ASP.NET ActionFilters和继承,asp.net,asp.net-mvc,attributes,action-filter,Asp.net,Asp.net Mvc,Attributes,Action Filter,我的所有控制器都继承自具有ActionFilter属性的BaseController: [AnalyticsData] public class BaseController : Controller {} public class AccountController : BaseController {} 控制器中的某些操作重用AnalyticsData ActionFilter: public class AccountController : BaseController {
[AnalyticsData]
public class BaseController : Controller {}
public class AccountController : BaseController {}
控制器中的某些操作重用AnalyticsData ActionFilter:
public class AccountController : BaseController
{
[AnalyticsData(Page="AccountProfile")]
public ActionResult Profile()
{
// return View
}
}
我注意到AnalyticsDataActionFilter只运行一次。这是一件好事,我只想让它运行一次,但我想知道这是怎么发生的。如果我在OnActionExecuting中设置断点:
public class AnalyticsAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
// break point set here
}
}
…当AccountController为其提供纵断面图时,它只会被击中一次
ActionFilters和/或属性如何工作,以使操作上的[AnalyticsData(Page=“AccountProfile”)]覆盖/替换BaseController上的[AnalyticsData]。简单的回答是,为每个操作重试筛选器列表的ASP.NET MVC框架代码会删除重复项(相同类型的操作筛选器)在某种程度上,它更喜欢在action方法上定义的actionfilters,而不是在控制器(或其基类)上定义的actionfilters。在MVC2中,此逻辑在ActionDescriptor类中的几个内部方法中执行