2009-07-23 3 views
12

J'utilise Unity pour instancier une nouvelle classe dans le constructeur du contrôleur et enregistrer la classe injectée dans une propriété du contrôleur. Ensuite, je veux utiliser un ActionFilter pour voir si la classe injectée a des propriétés que je valide dans son constructeur. Y a-t-il un moyen d'utiliser un ActionFilter pour valider les propriétés de la classe injectée?ASP.NET MVC - Accès à une propriété de contrôleur dans un ActionFilter

Merci à l'avance

Répondre

32

Quelque chose comme ça ?:

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

grâce skaffman. La chose est le filtre sera dans chaque contrôleur, mais pas tous auront la propriété définie. Donc, je dois regarder pour voir si elle existe dans le contrôleur actuel et ensuite vérifier la valeur si elle le fait:) ... –

+3

La façon la plus simple de le faire serait de créer une interface IContainsYourProperty (avec une seule propriété YourProperty) et avoir Les contrôleurs qui exposent cette propriété implémentent l'interface, le filtre peut vérifier l'existence de cette interface sur le contrôleur. Sinon, utilisez Reflection pour vérifier la propriété, mais il s'agit probablement d'une surcharge. – Levi

+0

C'est ce que j'ai fini par faire. Merci Levi :) –

Questions connexes