2009-07-10 18 views
5

I tiene un controlador de ASP.NET MVC como esteExtracción de un atributo heredado en .NET

[Authorize] 
public class ObjectController : Controller 
{ 
    public ObjectController(IDataService dataService) 
    { 
     DataService = dataService; 
    } 
    public IDataService DataService { get;set;} 
} 

El atributo Autorizar se define como "hereda = true" en el marco. Entonces cuando hago el próximo controlador:

public class DemoObjectController : ObjectController 
{ 
    public DemoObjectController(IDataService dataService) 
     : base (dataService) 
    { 
     DataService = new DemoDataService(DataService); 
    } 
} 

Obtiene el atributo authorize, pero no lo quiero aquí. Quiero que el controlador Demo Object esté disponible para todos, porque solo usa datos falsos.

Supongo que implementaré mi propio atributo Autorizar que no se heredará, ya que no puedo encontrar ninguna forma de eliminar el atributo de la clase heredada.

Respuesta

5

Dado que está marcado como heredado, no hay mucho que pueda hacer en este caso (ya que no controla el código que está buscando el atributo a través de la reflexión). Implementar su propio atributo parece ser la opción más práctica.

Con MVC también puede lograr la misma funcionalidad con anulaciones (los métodos On*), que podría valer la pena investigar.

0

Si un tipo base requiere autorización, entonces todos los tipos secundarios deben requerir autorización también. Creo que debe heredar de un tipo diferente, pero una solución alternativa sería declarar su propio AthorizeAttribute que funcione para esta instancia en particular.

Cuestiones relacionadas