Ho un valore predefinito CustomAuthorizeAttribute
definito nel progetto Web Api. Ignora il filtro di autorizzazione con un altro
config.Filters.Add(new CustomAuthorizeAttribute());
però ho un controller speciale dove vorrei usare un SpecialAuthorizeAttribute
.
[SpecialAuthorize]
public class MySpecialController : ApiController
Nel Asp.Net vNext abbiamo un nuovo attributo per ignorare i filtri predefiniti, ma come potevo farlo funzionare nel Web Api 2?
Edit 1:
Una possibile soluzione (ma non è l'ideale) è rendere il controllo CustomAuthorizeAttribute se c'è un altro AuthorizeAttribute nel campo di applicazione del Controller o azione. Nel mio caso ho solo lo SpecialAuthorizeAttribute così:
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);
}
}
È possibile applicare CustomAuthorizeAttribute agli altri controller anziché renderlo globale aggiungendolo alla configurazione. Significa che devi decorare ogni controller, ma probabilmente definisce più chiaramente ciò che stai effettivamente facendo. –