ServiceLayer中的MVC5 FilterAttributes

时间:2014-11-20 05:40:11

标签: c# asp.net-mvc asp.net-mvc-5 filterattribute

我想将C#FilterAttribute添加到我的一个服务层方法中。我已经完成了很多例子,我找到的只是FilterAttributes来装饰控制器方法。 如此article所示,它将全部用作Controller Method属性。

我已经尝试了授权过滤器和动作过滤器,如果我使用它们来装饰我的Controller方法,它们都可以工作。但是,如果我使用它们来装饰我的服务层方法,那些方法就不起作用了。

public class FeatureFilterAttribute : ActionFilterAttribute
{
    public string Feature { get; set; }

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        filterContext.HttpContext.Trace.Write("(Logging Filter)Action Executing: " +
            filterContext.ActionDescriptor.ActionName);

        base.OnActionExecuting(filterContext);
    }
}

另一件事是你可以看到我将一个参数传递给过滤器。

[FeatureFilter(Feature = FeatureValues.EmailNotifications)]

我尝试在Global.asax.cs中注册我的过滤器。然后调用过滤器,但我没有得到输入参数的值。我把它当作NULL。 我究竟做错了什么? 或者,是否有办法在服务层方法中使用FilterAttributes?

我的技术堆栈是基本的 MVC5 。 我发现了很多关于FilterAttributes的stackoverflow问题和答案,但其中没有一个使用服务层中的属性。

2 个答案:

答案 0 :(得分:1)

我认为您不应该使用ValidationAttribute和FilterAttribute来验证您的服务层。它们旨在验证您的表示层(通过ActionFilters和DataAnnotations)。

要通过属性验证服务层,可以使用拦截器。例如,如果您使用Castle Windsor,则可以为服务方法调用注册interceptor,并分析调用的方法是否使用某些验证属性进行修饰。

或者,如果您将WCF用于服务层,则可以创建实现IParameterInspector接口的自定义验证属性。示例here

答案 1 :(得分:0)

哎呀,我觉得我错了,我需要的是ValidationAttribute