ASP.NET MVC - 访问ActionFilter中的控制器属性

16 asp.net-mvc action-filter

我正在使用Unity将新类实例化到控制器构造函数中,并将注入的类保存在控制器内的属性中.然后我想使用ActionFilter来查看注入的类是否有一些我在其构造函数中验证的属性.那么有没有办法使用ActionFilter来验证注入类的属性?

提前致谢

eu-*_*-ne 41

像这样的东西?:

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 !!!");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 最简单的方法是创建一个IContainsYourProperty接口(具有单个YourProperty属性)并让控制器公开此属性实现接口,然后过滤器可以检查控制器上是否存在此接口.否则,使用Reflection来检查属性,但这可能是矫枉过正. (3认同)