Наследуют ли переопределенные действия фильтры действий от базового действия?

#c# #asp.net-mvc #overriding

#c# #asp.net-mvc #переопределение

Вопрос:

В моем приложении MVC у меня есть несколько универсальных базовых контроллеров, которые обрабатывают действия Create Edit Delete и работают без единого изменения в коде (кроме определения класса) для нескольких моделей. Иногда мне нужно изменить одно из базовых действий для какой-то конкретной модели, и я достигаю этого с помощью override . Теперь вопрос в том, наследуют ли переопределенные действия фильтры действий от своей базовой версии или они теряют их?

На секунду я подумал, что могу быстро проверить это в своем существующем коде, но потом я понял, что все действия будут работать в любом случае.

Интуиция подсказывает мне, что они действительно наследуются от базового действия (иначе MVC жаловался бы на неоднозначные действия в случае действий только post), но я не совсем уверен.

Поскольку я больше нигде не смог найти этот вопрос (а тем более ответ), я подумал, что его стоит задать, даже если это что-то очевидное для большинства людей.

Ответ №1:

ASP.NET MVC находит и учитывает фильтры действий в базовом классе контроллера.Тот, который применяется к самому классу контроллера. Посмотрите на это.

Переопределенные методы действий не будут выполняться, если в базовом классе есть методы действий, помеченные как виртуальные / абстрактные.

В определении вашего фильтра действий базового класса вы можете указать AttributeUsage с унаследованным значением false , чтобы оно не применялось к производным

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

Комментарии:

1. Итак, обычно фильтры атрибутов берутся из базового действия, но если я использую предоставленный вами код, я могу заставить их игнорироваться в переопределенном действии?

2. Да, это то, что ожидается, попробуйте создать пример приложения, которое это делает.