Как пропустить глобальный actionfilter из указанных c методов - PullRequest
0 голосов
/ 16 марта 2020

Я зарегистрировал свой actionfilter глобально

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    filters.Add(new MyNewCustomActionFilter());
}

Теперь мне нужно пропустить этот фильтр в некоторых методах, поведение, которое я хочу, похоже на [AllowAnonymous], как это сделать?

1 Ответ

2 голосов
/ 16 марта 2020

Вы должны сделать это в двух частях. Во-первых, реализуйте свой класс атрибутов, с помощью которого вы будете украшать метод, который вы будете sh исключать.

[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
public class ExcludeAttribute : Attribute
{
}

Затем в методе ExecuteActionFilterAsync вашей реализации IActionFilter проверьте, вызывается ли вызываемое действие украшен этим методом.

public Task<HttpResponseMessage> ExecuteActionFilterAsync(HttpActionContext actionContext, CancellationToken cancellationToken, Func<Task<HttpResponseMessage>> continuation)
{
    var excludeAttr = actionContext.ActionDescriptor.GetCustomAttributes<ExcludeAttribute>().SingleOrDefault();

    if (excludeAttr != null) // Exclude attribute found; short-circuit this filter
        return continuation();

    ... // Execute filter otherwise
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...