Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.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
C# 被重写的操作是否从基本操作继承操作筛选器?_C#_Asp.net Mvc_Overriding - Fatal编程技术网

C# 被重写的操作是否从基本操作继承操作筛选器?

C# 被重写的操作是否从基本操作继承操作筛选器?,c#,asp.net-mvc,overriding,C#,Asp.net Mvc,Overriding,在我的MVC应用程序中,我有几个通用的基本控制器,它们可以处理多个模型的创建\编辑\删除操作,并且不需要对代码进行任何更改(除了定义类之外)。有时,我需要更改某些特定模型的一个基本操作,并使用override实现这一点。现在的问题是,被重写的操作是从其基本版本继承操作筛选器还是丢失这些筛选器? 第二次,我认为我可以在现有代码中快速检查,但后来我意识到所有操作都可以以任何方式工作 我的直觉告诉我,它们确实是从基本动作继承而来的(否则MVC会在只发布动作的情况下抱怨模棱两可的动作),但我不太确定 由

在我的MVC应用程序中,我有几个通用的基本控制器,它们可以处理多个模型的创建\编辑\删除操作,并且不需要对代码进行任何更改(除了定义类之外)。有时,我需要更改某些特定模型的一个基本操作,并使用
override
实现这一点。现在的问题是,被重写的操作是从其基本版本继承操作筛选器还是丢失这些筛选器?

第二次,我认为我可以在现有代码中快速检查,但后来我意识到所有操作都可以以任何方式工作

我的直觉告诉我,它们确实是从基本动作继承而来的(否则MVC会在只发布动作的情况下抱怨模棱两可的动作),但我不太确定


由于我在其他任何地方都找不到这个问题(更不用说答案了),所以我认为即使这对大多数人来说是显而易见的,也值得一问。

ASP.NET MVC在基本控制器类上找到并尊重动作过滤器。该过滤器应用于控制器类本身

如果基类具有标记为virtual/abstract的操作方法,则重写的操作方法将不会执行

在基类的操作筛选器的定义上,可以将AttributeUsage与Inherited指定为false,因此它不适用于派生类

[System.AttributeUsage(System.AttributeTargets.All,
                   AllowMultiple = false,
                   Inherited = false)]

因此,通常情况下,属性过滤器取自基本操作,但如果我使用您提供的代码,我可以在重写操作中忽略它们?是的,这是预期的,请尝试创建一个执行此操作的示例应用程序。