Возможно ли переопределить атрибут, который был применен на уровне контроллера к определенному методу?

StackOverflow https://stackoverflow.com/questions/1213036

Вопрос

Если я применил атрибут авторизации на уровне контроллера, возможно ли переопределить это в одном из методов на этом контроллере?

Спасибо

Джеймс

Это было полезно?

Решение

Это зависит от того, какой тип "переопределения" вы хотите.Вы не можете удалить атрибут, который находится в классе, но вы можете снова добавить атрибут к методу, чтобы сделать его более ограничительным.

Обновляйте в ответ на комментарии. Во-первых, создание вашего собственного атрибута AuthorizeAttribute несколько опасно.AuthorizeAttribute содержит код, который взаимодействует с атрибутами кэширования, чтобы гарантировать, что кэш не сможет предоставлять защищенный контент неавторизованному пользователю.Как минимум, вы должны ввести подтип существующего атрибута AuthorizeAttribute, а не создавать что-то совершенно новое.Однако, как правило, лучше использовать существующий атрибут AuthorizeAttribute и специализировать свою авторизацию, создав новый / найдя существующего ASP.NET поставщик членства.

Я не думаю, что было бы хорошим дизайном иметь фильтр для действия, которое "переопределяет" фильтр на контроллере.Однако вы могли бы изменить дизайн фильтра на контроллере, чтобы не требовать авторизации для действия с определенным именем.Вы могли бы, например, переопределить AuthorizeAttribute.Метод AuthorizeCore для проверки имени действия таким же образом, как существующий метод проверяет имя пользователя и роли.Обратите очень пристальное внимание на комментарии в этом методе относительно потокобезопасности.

Другие советы

Я не уверен, что это точно такой же вопрос, но это может помочь...

Как сделать, чтобы ActionFilter в методе action имел приоритет над тем же ActionFilter на контроллере

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top