Переопределить фильтр авторизации другим

У меня есть значение по умолчанию CustomAuthorizeAttribute, определенное в моем проекте Web Api.

config.Filters.Add(new CustomAuthorizeAttribute());

Однако у меня есть специальный контроллер, в котором я хотел бы использовать SpecialAuthorizeAttribute.

[SpecialAuthorize]
public class MySpecialController : ApiController

В Asp.Net vNext у нас есть новый атрибут для переопределения фильтров по умолчанию, но как заставить его работать в Web Api 2?

Редактировать 1:

Одним из возможных (но не идеальных) решений является проверка CustomAuthorizeAttribute на наличие другого AuthorizeAttribute в области контроллера или действия. В моем случае у меня есть только SpecialAuthorizeAttribute, поэтому:

public class CustomAuthorizeAttribute : AuthorizeAttribute
{
    public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext)
    {
        if (actionContext.ControllerContext.ControllerDescriptor.GetCustomAttributes<SpecialAuthorizeAttribute>().Any() || actionContext.ActionDescriptor.GetCustomAttributes<SpecialAuthorizeAttribute>().Any())
        {
            return;
        }
        base.OnAuthorization(actionContext);
    }

    public override System.Threading.Tasks.Task OnAuthorizationAsync(System.Web.Http.Controllers.HttpActionContext actionContext, System.Threading.CancellationToken cancellationToken)
    {
        return base.OnAuthorizationAsync(actionContext, cancellationToken);
    }
}

person Max Bündchen    schedule 07.08.2015    source источник
comment
Вы можете применить свой CustomAuthorizeAttribute к другим контроллерам, а не сделать его глобальным, добавив его в конфигурацию. Это означает, что вам нужно украсить каждый контроллер, но это, вероятно, более четко определяет, что вы на самом деле делаете.   -  person snow_FFFFFF    schedule 07.08.2015


Ответы (2)


Вы можете использовать OverrideAuthenticationAttribute< /а>. Как вы можете этот ответ, этот атрибут используется для подавления глобальных фильтров аутентификации.

person Pedro Drewanz    schedule 13.07.2017

Атрибут OverrideAuthorization точно соответствует вашим требованиям (в ASP.NET Web API 2). Вы можете найти его использование и назначение простыми словами в этой статье.

person Deepak Ageeru    schedule 09.10.2019