我正在控制器中使用服务过滤器属性。在服务过滤器中,我称为“动作”过滤器,在动作过滤器中,我执行诸如OnActionExecution
之类的动作方法。
我的情况是从控制器传递参数。使用该参数,我需要在操作过滤器类中执行必要的操作。
控制器
[HasPermission(1)]
public async Task<ActionResult> GetDetailsAsync()
{
-----
}
服务过滤器
public class HasPermissionAttribute : ServiceFilterAttribute
{
public HasPermissionAttribute()
: base(typeof(HasPermissionAsyncFilter))
{
}
}
动作过滤器
public class HasPermissionAsyncFilter : IAsyncActionFilter
{
public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
-------------Need to use the values passed from the attribute-------
}
}
注意:
需要传递属性中的值
HasPermission(1)
HasPermission(2)
喜欢这个……
答案 0 :(得分:1)
有TypeFilterAttribute与[ServiceFilterAttribute]
类似,但允许您传递参数:
public class HasPermissionAttribute : TypeFilterAttribute // Changed parent class
{
public HasPermissionAttribute(int value)
: base(typeof(HasPermissionAsyncFilter))
{
Arguments = new object[] { value };
}
}
public class HasPermissionAsyncFilter : IAsyncActionFilter
{
private readonly int _permissionValue;
public HasPermissionAsyncFilter(int permissionValue)
{
_permissionValue = permissionValue;
}
public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
// -------------Need to use the values passed from the attribute-------
var x = _permissionValue;
}
}