Поиск фильтра в ActionFilterAttribute

Я создал пользовательский атрибут ActionFilterAttribute, который я вызываю следующим образом:

 [ScopeActionFilter(acceptedScopes = new string[] { "Files.Upload" })]
  public IActionResult Upload(IFormFile[] files)
   {
   }

Теперь, как мне найти значение acceptedScopes в методе OnActionExecuting? И как мне проверить, что acceptScopes был передан в ActionFilter?

 public class ScopeActionFilter : ActionFilterAttribute
    {
        public string[] acceptedScopes { get; set; }

        public override void OnActionExecuting(ActionExecutingContext actionContext)
        { 
       
                ScopesRequiredByWebApiExtension.VerifyUserHasAnyAcceptedScope(actionContext.HttpContext, actionContext.ActionArguments["acceptedScopes"] as string[]);

        }    
    }

person Sam    schedule 30.06.2020    source источник
comment
Не могли бы вы рассказать мне, что такое ScopesRequiredByWebApiExtension? Это класс, который вы сделали?   -  person kblau    schedule 01.07.2020
comment
Да это и не имеет отношения к моему вопросу. Как я могу проверить, что acceptScopes был передан, и как мне получить его значение?   -  person Sam    schedule 01.07.2020


Ответы (2)


как найти значение acceptScopes в методе OnActionExecuting?

В вашем коде мы можем обнаружить, что вы установили значение для свойства acceptedScopes при применении метода ScopeActionFilter к действию, чтобы получить значение acceptedScopes в методе OnActionExecuting, вы можете попробовать:

public class ScopeActionFilter : ActionFilterAttribute
{
    public string[] acceptedScopes { get; set; }

    public override void OnActionExecuting(ActionExecutingContext actionContext)
    {
        var args = acceptedScopes;
   
        ScopesRequiredByWebApiExtension.VerifyUserHasAnyAcceptedScope(actionContext.HttpContext, args);

    }
} 

Результат испытаний

введите здесь описание изображения

person Fei Han    schedule 01.07.2020
comment
Не могу поверить, что это было так просто. Должно быть, вчера вечером поработал слишком поздно :p Спасибо. - person Sam; 01.07.2020

string[] ActionArguments = ((ScopeActionFilter)actionContext.Filters.Where(t => t is ScopeActionFilter).First()).acceptedScopes;

заработает

person kblau    schedule 30.06.2020