#oop #asp.net-mvc-3 #attributes
#ооп #asp.net-mvc-3 #атрибуты
Вопрос:
У нас есть базовый контроллер, который наследуют все другие наши контроллеры, и пользовательский атрибут RequireHttps. Этот пользовательский атрибут имеет переключатель, позволяющий либо принудительно использовать SSL, либо полагаться на параметр в файле конфигурации. Базовый контроллер украшен этим атрибутом и настроен на использование настроек конфигурации, что является правильным поведением для 95% наших контроллеров. Однако у нас есть пара контроллеров, которые мы хотим настроить так, чтобы они всегда требовали SSL. Если я применю атрибут к этим двум контроллерам для принудительного использования SSL, то код RequireHttpsAttribute будет запущен дважды (вероятно, это не огромная проблема, но, безусловно, не идеально).
Есть ли у меня какой-либо способ переопределить объявление атрибута в базовом классе объявлением атрибута в дочернем классе? Я подозреваю, что не могу, но хотел бы знать наверняка.
Спасибо всем
Ответ №1:
Как насчет создания другого пользовательского атрибута, который введет в текущий HttpContext некоторое значение, указывающее, что требуется SSL. Затем вы украсите этим атрибутом контроллеры, которые должны быть исключением. Затем измените свой пользовательский атрибут RequireHttps, чтобы проверить наличие этого значения в HttpContext и применить SSL.
Вам нужно только убедиться, что этот новый фильтр будет запущен перед пользовательским атрибутом RequireHttps. Это можно было бы сделать либо с помощью Order
свойства.