Come abilitare CORS sulla tua API Web

Le restrizioni di sicurezza sulla politica di sicurezza del tuo browser impediscono al tuo browser web di effettuare richieste AJAX a un server in un altro dominio. Questo è anche noto come criterio della stessa origine. In altre parole, la sicurezza del browser integrata impedisce a una pagina web di un dominio di eseguire chiamate AJAX su un altro dominio.

Ecco dove CORS (Cross-Origin Resource Sharing) viene in soccorso. CORS è uno standard W3C che consente di allontanarsi dalla stessa policy di origine adottata dai browser per limitare l'accesso da un dominio alle risorse appartenenti ad un altro dominio. È possibile abilitare CORS per l'API Web utilizzando il rispettivo pacchetto API Web (a seconda della versione dell'API Web in uso) o il middleware OWIN.

Notare che l'origine di una richiesta è composta da uno schema, un host e un numero di porta. Quindi, due richieste vengono considerate dalla stessa origine se hanno lo stesso schema, host e numero di porta. Se qualcuno di questi è diverso, le richieste sono considerate cross origin, cioè non appartenenti a origini identiche.

Abilita il supporto CORS nell'API Web ASP.NET

L'API Web ASP.NET fornisce un eccellente supporto per CORS. Per fornire supporto per CORS nell'API Web ASP.NET 2, è necessario usare il pacchetto NuGet Microsoft.AspNet.WebApi.Cors. Per installare questo pacchetto, è possibile eseguire il comando seguente dalla console del gestore pacchetti NuGet.

Pacchetto di installazione Microsoft.AspNet.WebApi.Cors

In alternativa, è possibile selezionare il progetto nella finestra Esplora soluzioni e installare il pacchetto tramite il gestore di pacchetti NuGet.

Se si utilizza l'API Web 1.0, è possibile abilitare il supporto CORS, incluse le seguenti istruzioni nel gestore dell'evento Application_BeginRequest del file Global.asax.cs.

HttpContext.Current.Response.AddHeader ("Access-Control-Allow-Origin", allowedOrigin); 

HttpContext.Current.Response.AddHeader ("Access-Control-Allow-Methods", "GET, POST");

Si noti che "allowedOrigin" qui è una variabile stringa che contiene l'origine della richiesta che vuole accedere alla risorsa. 

Il supporto per CORS può essere abilitato a tre livelli. Questi includono quanto segue:

  • Livello di azione
  • Livello controller
  • Livello globale

Abilita CORS a livello globale

Per abilitare CORS a livello globale, è necessario sfruttare il metodo EnableCors della classe HttpConfiguration come mostrato nel frammento di codice riportato di seguito.

registro void statico pubblico (configurazione HttpConfiguration)

        {

            string origin = "// localhost: 50164 / WebClient /";

            EnableCorsAttribute cors = new EnableCorsAttribute (origin, "*", "GET, POST");

            config.EnableCors (cors);

            // Specificare qui la configurazione ei servizi dell'API Web

            // Specificare qui le rotte dell'API Web          

        }

    }

Fare riferimento allo snippet di codice riportato sopra. Notare come è stata specificata l'origine della richiesta. Il parametro * implica tutte le intestazioni di richiesta. Quindi, le richieste GET e POST dal dominio specificato verranno accettate, tutte le altre richieste verranno rifiutate.

Abilita CORS a livello di controller

È inoltre possibile abilitare il supporto CORS a livello di controller. A tale scopo, specificare l'attributo [EnableCors] nel controller dell'API Web come mostrato di seguito.

  [EnableCors (origini: "// localhost: 50164 /", intestazioni: "*", metodi: "*")]

    classe pubblica AuthorsController: ApiController

    {  

        // Scrivi qui i metodi del controller dell'API Web

    }

Abilita CORS a livello di azione

Allo stesso modo, è anche possibile abilitare CORS a livello di azione utilizzando l'attributo [EnableCORS]. Ecco un esempio che illustra come eseguire questa operazione.

classe pubblica AuthorsController: ApiController

    {

        [EnableCors (origini: "// localhost: 50164 /", intestazioni: "*", metodi: "*")]

        public IEnumerable Get ()

        {

            restituisce una nuova stringa [] {"Joydip Kanjilal", "Steve Smith"};

        }

    }

Disabilita CORS per un'azione specifica

Ora, potrebbe essere necessario disabilitare CORS per un'azione specifica o un gruppo di azioni. Questa funzione potrebbe essere utile quando hai già abilitato CORS a livello globale e ora desideri disabilitarlo per una o più azioni per motivi di sicurezza. Il seguente frammento di codice illustra come ottenere questo risultato utilizzando l'attributo [DisableCors].

[DisableCors ()]

public IEnumerable Get ()

   {

      restituisce una nuova stringa [] {"Joydip Kanjilal", "Steve Smith"};

   }

Se si usa ASP.NET Core, è necessario aggiungere il pacchetto Microsoft.AspNetCore.Cors tramite NuGet al progetto e quindi scrivere la seguente istruzione nel file Startup.cs per configurare il supporto CORS.

public void ConfigureServices (servizi IServiceCollection)

{

    services.AddCors ();

}

Puoi abilitare CORS utilizzando il middleware CORS: puoi sfruttare il metodo di estensione UseCors a questo proposito. In alternativa, puoi abilitare CORS al controller o ai livelli di azione usando l'attributo EnableCors in modo molto simile a come abbiamo fatto in precedenza in questo articolo. Allo stesso modo, per disabilitare CORS, è possibile utilizzare l'attributo [DisableCors].