このような何かが
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 !!!");
}
}
}
おかげでskaffmanを?:します。フィルターはすべてのコントローラーにありますが、それらのすべてがプロパティーを定義するわけではありません。だから私はそれが現在のコントローラに存在するかどうかを調べ、それがあれば値をチェックしなければなりません:)... –
これを行う最も簡単な方法は(1つのYourPropertyプロパティで)IContainsYourPropertyインターフェイスを作成し、このプロパティを公開するコントローラがインタフェースを実装すると、フィルタはコントローラ上にこのインタフェースの存在をチェックできます。それ以外の場合は、Reflectionを使用してプロパティを確認しますが、これはおそらく過剰です。 – Levi
それは私がやったことでした。ありがとうレビ:) –