#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. Да, это то, что ожидается, попробуйте создать пример приложения, которое это делает.