C# 被重写的操作是否从基本操作继承操作筛选器?
在我的MVC应用程序中,我有几个通用的基本控制器,它们可以处理多个模型的创建\编辑\删除操作,并且不需要对代码进行任何更改(除了定义类之外)。有时,我需要更改某些特定模型的一个基本操作,并使用C# 被重写的操作是否从基本操作继承操作筛选器?,c#,asp.net-mvc,overriding,C#,Asp.net Mvc,Overriding,在我的MVC应用程序中,我有几个通用的基本控制器,它们可以处理多个模型的创建\编辑\删除操作,并且不需要对代码进行任何更改(除了定义类之外)。有时,我需要更改某些特定模型的一个基本操作,并使用override实现这一点。现在的问题是,被重写的操作是从其基本版本继承操作筛选器还是丢失这些筛选器? 第二次,我认为我可以在现有代码中快速检查,但后来我意识到所有操作都可以以任何方式工作 我的直觉告诉我,它们确实是从基本动作继承而来的(否则MVC会在只发布动作的情况下抱怨模棱两可的动作),但我不太确定 由
override
实现这一点。现在的问题是,被重写的操作是从其基本版本继承操作筛选器还是丢失这些筛选器?
第二次,我认为我可以在现有代码中快速检查,但后来我意识到所有操作都可以以任何方式工作
我的直觉告诉我,它们确实是从基本动作继承而来的(否则MVC会在只发布动作的情况下抱怨模棱两可的动作),但我不太确定
由于我在其他任何地方都找不到这个问题(更不用说答案了),所以我认为即使这对大多数人来说是显而易见的,也值得一问。ASP.NET MVC在基本控制器类上找到并尊重动作过滤器。该过滤器应用于控制器类本身 如果基类具有标记为virtual/abstract的操作方法,则重写的操作方法将不会执行 在基类的操作筛选器的定义上,可以将AttributeUsage与Inherited指定为false,因此它不适用于派生类
[System.AttributeUsage(System.AttributeTargets.All,
AllowMultiple = false,
Inherited = false)]
因此,通常情况下,属性过滤器取自基本操作,但如果我使用您提供的代码,我可以在重写操作中忽略它们?是的,这是预期的,请尝试创建一个执行此操作的示例应用程序。