У меня есть значение по умолчанию CustomAuthorizeAttribute
, определенное в моем проекте Web Api. Переопределить фильтр авторизации с другим
config.Filters.Add(new CustomAuthorizeAttribute());
Однако у меня есть специальный контроллер, где я хотел бы использовать SpecialAuthorizeAttribute
.
[SpecialAuthorize]
public class MySpecialController : ApiController
В Asp.Net vNext у нас есть новый атрибут, чтобы переопределить фильтры по умолчанию, но как я могу заставить его работать в Web Api 2?
Edit 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);
}
}
Вы можете применить свой атрибут CustomAuthorizeAttribute к другим контроллерам, а не делать его глобальным, добавив его в конфигурацию. Это означает, что вам нужно украсить каждый контроллер, но он, вероятно, более четко определяет, что вы на самом деле делаете. –