¿Es posible anular un atributo que se ha aplicado a nivel de controlador en un método específico?

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

Pregunta

Si he aplicado un atributo de autorización a nivel de controlador, ¿es posible anular esto en uno de los métodos en ese controlador?

Gracias

James

¿Fue útil?

Solución

Eso depende de qué tipo de "anulación" usted quiere. No puede eliminar el atributo que está en la clase, pero puede agregar el atributo al método nuevamente para hacer las cosas más restrictivas.

Actualice en respuesta a los comentarios. Primero, hacer su propio AuthorizeAttribute es algo peligroso. AuthorizeAttribute contiene código que interactúa con los atributos de almacenamiento en caché para garantizar que la memoria caché no pueda servir contenido protegido a un usuario no autorizado. Como mínimo, debe subtipear el AuthorizeAttribute existente en lugar de crear algo completamente nuevo. En general, sin embargo, es una mejor idea usar el AuthorizeAttribute existente y especializar su autorización creando un nuevo / buscando un proveedor de membresía ASP.NET existente.

No creo que sería un buen diseño tener un filtro en una acción que '' anula '' Un filtro en un controlador. Sin embargo, puede cambiar el diseño del filtro en el controlador para no requerir autorización en una acción de un nombre determinado. Podría, por ejemplo, anular el método AuthorizeAttribute.AuthorizeCore para probar un nombre de acción de la misma manera que el método existente prueba el nombre de usuario y los roles. Tome muy en cuenta los comentarios de este método con respecto a la seguridad del hilo.

Otros consejos

No estoy seguro de si esta es exactamente la misma pregunta, pero puede ayudar ...

Cómo hacer ActionFilter en El método de acción tiene prioridad sobre el mismo ActionFilter en el controlador

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top