Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET ActionFilters和继承_Asp.net_Asp.net Mvc_Attributes_Action Filter - Fatal编程技术网

ASP.NET ActionFilters和继承

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 {

我的所有控制器都继承自具有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
    }
}
我注意到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类中的几个内部方法中执行