在 ActionFilterAttribute 中查找过滤器

Finding a filter in ActionFilterAttribute

我创建了一个自定义的 ActionFilterAttribute,我这样称呼它:

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

现在,如何在 OnActionExecuting 方法中找到 acceptedScopes 的值?我如何检查 acceptedScopes 是否已传递给 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[]);

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

会起作用

how do I find the value of acceptedScopes in the OnActionExecuting method ?

在您的代码中,我们可以发现您在将 ScopeActionFilter 应用于 action 方法时设置了 acceptedScopes 属性 的值,以获取 [=11= 的值] 在OnActionExecuting方法中,可以试试:

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

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

    }
} 

测试结果