MVC3 — Переопределение атрибута при объявлении базового класса

#oop #asp.net-mvc-3 #attributes

#ооп #asp.net-mvc-3 #атрибуты

Вопрос:

У нас есть базовый контроллер, который наследуют все другие наши контроллеры, и пользовательский атрибут RequireHttps. Этот пользовательский атрибут имеет переключатель, позволяющий либо принудительно использовать SSL, либо полагаться на параметр в файле конфигурации. Базовый контроллер украшен этим атрибутом и настроен на использование настроек конфигурации, что является правильным поведением для 95% наших контроллеров. Однако у нас есть пара контроллеров, которые мы хотим настроить так, чтобы они всегда требовали SSL. Если я применю атрибут к этим двум контроллерам для принудительного использования SSL, то код RequireHttpsAttribute будет запущен дважды (вероятно, это не огромная проблема, но, безусловно, не идеально).

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

Спасибо всем

Ответ №1:

Как насчет создания другого пользовательского атрибута, который введет в текущий HttpContext некоторое значение, указывающее, что требуется SSL. Затем вы украсите этим атрибутом контроллеры, которые должны быть исключением. Затем измените свой пользовательский атрибут RequireHttps, чтобы проверить наличие этого значения в HttpContext и применить SSL.

Вам нужно только убедиться, что этот новый фильтр будет запущен перед пользовательским атрибутом RequireHttps. Это можно было бы сделать либо с помощью Order свойства.