2009-07-23 5 views
12

Ich verwende Unity, um eine neue Klasse in den Controller-Konstruktor zu instanziieren und die eingefügte Klasse in einer Eigenschaft im Controller zu speichern. Dann möchte ich einen ActionFilter verwenden, um zu sehen, ob die injizierte Klasse einige Eigenschaften hat, die ich innerhalb ihres Konstruktors validiere. Gibt es eine Möglichkeit, einen ActionFilter zu verwenden, um die Eigenschaften der eingefügten Klasse zu validieren?ASP.NET MVC - Zugriff auf eine Controller-Eigenschaft in einem ActionFilter

Vielen Dank im Voraus

Antwort

32

So etwas ?:

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

dank skaffman. Die Sache ist der Filter wird in jedem Controller sein, aber nicht alle von ihnen werden die Eigenschaft definiert haben. Also muss ich schauen, ob es im aktuellen Controller vorhanden ist und dann den Wert überprüfen, wenn es das tut:) ... –

+3

Der einfachste Weg, dies zu tun wäre, eine IContainsYourProperty-Schnittstelle (mit einer einzigen YourProperty-Eigenschaft) zu erstellen Controller, die diese Eigenschaft verfügbar machen, implementieren die Schnittstelle, dann kann der Filter das Vorhandensein dieser Schnittstelle auf dem Controller überprüfen. Andernfalls verwenden Sie Reflection, um nach der Eigenschaft zu suchen, aber das ist wahrscheinlich zu viel. – Levi

+0

Das war, was ich getan habe. Danke Levi :) –

Verwandte Themen