【问题标题】:Add parameter to the action filter from service filter从服务过滤器向操作过滤器添加参数
【发布时间】:2020-05-12 16:23:35
【问题描述】:

我在控制器中使用服务过滤器属性。在服务过滤器中,我调用了操作过滤器,在操作过滤器内部,我执行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-------
       }
 }

注意:

需要传递属性中的值

有权限(1)

有权限(2)

这样……

【问题讨论】:

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


    【解决方案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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2015-01-22
      • 2018-03-14
      • 2011-02-04
      • 2011-08-16
      • 2018-09-15
      • 1970-01-01
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多