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 的堆栈溢出问题和答案,但没有一个在服务层中使用属性。
我认为您不应该使用 ValidationAttribute 和 FilterAttribute 来验证您的服务图层。它们旨在验证您的表示层(通过操作过滤器和数据注释)。
要通过属性验证服务图层,您可以使用拦截器。例如,如果使用 Castle Windsor,则可以为服务方法调用注册拦截器,并分析正在调用的方法是否使用某些验证属性进行修饰。
或者,如果将 WCF 用于服务层,则可以创建实现 IParameterInspector 接口的自定义验证属性。这里的例子。
哎呀,我想我都错了,我需要的是验证属性。