Добавить параметр в фильтр действий из сервисного фильтра - PullRequest
0 голосов
/ 27 января 2020

Я использую атрибут фильтра сервиса в контроллере. Из сервисного фильтра я назвал фильтр действий, а внутри фильтра действий я выполняю такие методы действий, как 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 Ответ

1 голос
/ 27 января 2020

Есть 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;
    }
}
...