2009-07-23 15 views
12

Estoy usando Unity para instanciar una nueva clase en el constructor del controlador y guardar la clase inyectada en una propiedad dentro del controlador. Entonces quiero usar un ActionFilter para ver si la clase inyectada tiene algunas propiedades que valito dentro de su constructor. Entonces, ¿hay alguna manera de usar un ActionFilter para validar las propiedades de la clase inyectada?ASP.NET MVC - Accede a una propiedad del controlador en un ActionFilter

Gracias de antemano

Respuesta

32

Algo como esto ?:

public class ValidateActionFilterAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     var yourController = filterContext.Controller as YourController; 

     if (yourController == null) 
     { 
      throw new InvalidOperationException("It is not YourController !!!"); 
     } 

     // It is YourController - validate here 
     var yourProperty = yourController.YourProperty; 

     // UPDATED *************************** 
     // or test whether controller has property 

     var property = filterContext.Controller.GetType().GetProperty("YourProperty"); 

     if(property == null) 
     { 
      throw new InvalidOperationException("There is no YourProperty !!!"); 
     } 
    } 
} 
+0

gracias skaffman. El hecho es que el filtro estará en cada controlador, pero no todos tendrán la propiedad definida. Así que tengo que mirar para ver si existe en el controlador actual y luego verificar el valor si lo hace:) ... –

+3

La manera más fácil de hacer esto sería hacer una interfaz IContainsYourProperty (con una sola propiedad YourProperty) y tener los controladores que exponen esta propiedad implementan la interfaz, luego el filtro puede verificar la existencia de esta interfaz en el controlador. De lo contrario, use Reflection para verificar la propiedad, pero esto probablemente sea excesivo. – Levi

+0

Eso fue lo que terminé haciendo. Gracias Levi :) –

Cuestiones relacionadas