MVC5 FilterAttributes in ServiceLayer

本文关键字:ServiceLayer in FilterAttributes MVC5 | 更新日期: 2023-09-27 18:31:13

我想将 C# FilterAttribute 添加到我的一个服务层方法中。我已经通过了很多示例,我发现的只是用于装饰控制器方法的过滤器属性。如本文所示,它将全部用作控制器方法属性。

我已经尝试了授权过滤器和操作过滤器,如果我使用这些来装饰我的控制器方法,两者都有效。但是,如果我使用这些方法来装饰我的服务层方法,则这些方法不起作用。

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中注册我的过滤器。然后调用过滤器,但我没有得到输入参数的值。我得到它为空。我做错了什么?或者,有没有办法在服务层方法中使用过滤器属性?

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

MVC5 FilterAttributes in ServiceLayer

我认为您不应该使用 ValidationAttribute 和 FilterAttribute 来验证您的服务图层。它们旨在验证您的表示层(通过操作过滤器和数据注释)。

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

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

哎呀,我想我都错了,我需要的是验证属性。