5

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); 
    } 
} 
+1

È 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. –

risposta

Problemi correlati