从服务过滤器向操作过滤器添加参数

时间:2020-01-27 09:53:32

标签: c# .net-core action-filter actionfilterattribute

我正在控制器中使用服务过滤器属性。在服务过滤器中,我称为“动作”过滤器,在动作过滤器中,我执行诸如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)

喜欢这个……

1 个答案:

答案 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;
    }
}
相关问题