2009-07-23 12 views
12

Unityを使用して新しいクラスをコントローラコンストラクタにインスタンス化し、注入されたクラスをコントローラ内のプロパティに保存しています。次に、ActionFilterを使用して、注入されたクラスにコンストラクタ内で検証するプロパティがあるかどうかを確認します。そこで、注入されたクラスのプロパティを有効にするためにActionFilterを使用する方法はありますか?事前にASP.NET MVC - ActionFilterのコントローラプロパティにアクセス

おかげで

答えて

32

このような何かが

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

おかげでskaffmanを?:します。フィルターはすべてのコントローラーにありますが、それらのすべてがプロパティーを定義するわけではありません。だから私はそれが現在のコントローラに存在するかどうかを調べ、それがあれば値をチェックしなければなりません:)... –

+3

これを行う最も簡単な方法は(1つのYourPropertyプロパティで)IContainsYourPropertyインターフェイスを作成し、このプロパティを公開するコントローラがインタフェースを実装すると、フィルタはコントローラ上にこのインタフェースの存在をチェックできます。それ以外の場合は、Reflectionを使用してプロパティを確認しますが、これはおそらく過剰です。 – Levi

+0

それは私がやったことでした。ありがとうレビ:) –

関連する問題