在我的MVC应用程序中,我有一些通用的基本控制器,可以处理Create \ Edit \ Delete操作,并且可以在不对代码进行单一更改(除了为多个模型定义类)之外。偶尔我需要改变某个特定模型的基本操作之一,然后使用override
来实现。现在,问题是,被覆盖的操作是否会从其基本版本继承操作过滤器,还是会丢失这些过滤器?
对于我的第二个,我认为我可以在现有代码中快速检查,但后来我意识到所有操作都可以正常工作。
我的直觉告诉我他们确实从基础行动中继承了(否则MVC会抱怨在仅发布操作的情况下采取模棱两可的行动),但我不太确定。
由于我无法在其他任何地方找到这个问题(更不用说答案),我认为即使对大多数人来说这是显而易见的,也值得一提。
答案 0 :(得分:1)
ASP.NET MVC查找并尊重基本控制器类上的操作过滤器。应用于控制器类本身的操作过滤器。 See this.
如果基类具有标记为virtual / abstract的操作方法,则不会执行Overriden操作方法。
关于基类的动作过滤器的定义,您可以指定具有Inherited的AttributeUsage为false,因此它不适用于派生的
[System.AttributeUsage(System.AttributeTargets.All,
AllowMultiple = false,
Inherited = false)]