Возможно ли переопределить атрибут, который был применен на уровне контроллера к определенному методу?
-
06-07-2019 - |
Вопрос
Если я применил атрибут авторизации на уровне контроллера, возможно ли переопределить это в одном из методов на этом контроллере?
Спасибо
Джеймс
Решение
Это зависит от того, какой тип "переопределения" вы хотите.Вы не можете удалить атрибут, который находится в классе, но вы можете снова добавить атрибут к методу, чтобы сделать его более ограничительным.
Обновляйте в ответ на комментарии. Во-первых, создание вашего собственного атрибута AuthorizeAttribute несколько опасно.AuthorizeAttribute содержит код, который взаимодействует с атрибутами кэширования, чтобы гарантировать, что кэш не сможет предоставлять защищенный контент неавторизованному пользователю.Как минимум, вы должны ввести подтип существующего атрибута AuthorizeAttribute, а не создавать что-то совершенно новое.Однако, как правило, лучше использовать существующий атрибут AuthorizeAttribute и специализировать свою авторизацию, создав новый / найдя существующего ASP.NET поставщик членства.
Я не думаю, что было бы хорошим дизайном иметь фильтр для действия, которое "переопределяет" фильтр на контроллере.Однако вы могли бы изменить дизайн фильтра на контроллере, чтобы не требовать авторизации для действия с определенным именем.Вы могли бы, например, переопределить AuthorizeAttribute.Метод AuthorizeCore для проверки имени действия таким же образом, как существующий метод проверяет имя пользователя и роли.Обратите очень пристальное внимание на комментарии в этом методе относительно потокобезопасности.
Другие советы
Я не уверен, что это точно такой же вопрос, но это может помочь...