У меня есть значение по умолчанию 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);
}
}