Kako omogućiti CORS na vašem web API-ju

Sigurnosna ograničenja sigurnosnih pravila vašeg preglednika sprječavaju vaš web preglednik da šalje AJAX zahtjeve poslužitelju u drugoj domeni. To je također poznato kao politika istog podrijetla. Drugim riječima, ugrađena sigurnost preglednika sprječava web stranicu jedne domene da izvršava AJAX pozive na drugoj domeni.

Evo gdje CORS (Cross-Origin Resource Sharing) dolazi u pomoć. CORS je W3C standard koji vam omogućuje da se maknete od iste politike podrijetla koju su prihvatili preglednici da ograniče pristup s jedne domene resursima koji pripadaju drugoj domeni. Možete omogućiti CORS za svoj web API pomoću odgovarajućeg paketa web API-ja (ovisno o verziji web API-ja koji se koristi) ili OWIN posredničkog softvera.

Imajte na umu da se podrijetlo zahtjeva sastoji od sheme, hosta i broja porta. Dakle, dva zahtjeva se smatraju istim podrijetlom ako imaju istu shemu, host i broj porta. Ako se bilo koja od ovih razlika razlikuje, smatra se da su zahtjevi unakrsnog podrijetla, tj. Da ne pripadaju identičnom podrijetlu.

Omogućite CORS podršku u ASP.NET Web API-ju

ASP.NET web API pruža izvrsnu podršku za CORS. Da biste pružili podršku za CORS u ASP.NET Web API 2, morate koristiti paket NuGet Microsoft.AspNet.WebApi.Cors. Da biste instalirali ovaj paket, možete izvršiti sljedeću naredbu s konzole upravitelja paketa NuGet.

Instalacijski paket Microsoft.AspNet.WebApi.Cors

Možete i odabrati svoj projekt u prozoru Solution Explorer i instalirati paket putem upravitelja paketa NuGet.

Ako koristite Web API 1.0, možete omogućiti CORS podršku uključujući sljedeće izjave u obrađivaču događaja Application_BeginRequest datoteke Global.asax.cs.

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

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

Imajte na umu da je “allowedOrigin” ovdje varijabla niza koja sadrži podrijetlo zahtjeva koji želi pristupiti resursu. 

Podrška za CORS može se omogućiti na tri razine. To uključuje sljedeće:

  • Razina djelovanja
  • Razina kontrolera
  • Globalna razina

Omogućite CORS na globalnoj razini

Da biste omogućili CORS na globalnoj razini, trebali biste iskoristiti metodu EnableCors klase HttpConfiguration kao što je prikazano u donjem isječku koda.

javni statički void Registar (HttpConfiguration config)

        {

            izvor porijekla = "// localhost: 50164 / WebClient /";

            EnableCorsAttribute cors = novi EnableCorsAttribute (ishodište, "*", "GET, POST");

            config.EnableCors (cors);

            // Ovdje navedite konfiguraciju i usluge Web API-ja

            // Ovdje navedite rute web API-ja          

        }

    }

Pogledajte gore navedeni isječak koda. Imajte na umu kako je navedeno podrijetlo zahtjeva. Parametar * podrazumijeva sva zaglavlja zahtjeva. Dakle, prihvaćaju se zahtjevi GET i POST s navedene domene, a svi ostali zahtjevi bit će odbijeni.

Omogućite CORS na razini kontrolera

Podršku za CORS možete omogućiti i na razini kontrolera. Da biste to učinili, navedite atribut [EnableCors] za svoj web API kontroler kako je prikazano u nastavku.

  [EnableCors (ishodište: "// localhost: 50164 /", zaglavlja: "*", metode: "*")]

    javna klasa AuthorsController: ApiController

    {  

        // Ovdje napišite svoje metode kontrolera za web API

    }

Omogućite CORS na razini akcije

Slično tome, CORS možete omogućiti i na razini akcije pomoću atributa [EnableCORS]. Evo primjera koji ilustrira kako se to radi.

javna klasa AuthorsController: ApiController

    {

        [EnableCors (ishodište: "// localhost: 50164 /", zaglavlja: "*", metode: "*")]

        javni IEnumerable Get ()

        {

            vrati novi niz [] {"Joydip Kanjilal", "Steve Smith"};

        }

    }

Onemogućite CORS za određenu radnju

Sada ćete možda trebati onemogućiti CORS za određenu radnju ili skupinu radnji. Ova bi značajka mogla biti korisna kada ste već omogućili CORS na globalnoj razini, a sada ga želite onemogućiti zbog jedne od više radnji iz sigurnosnih razloga. Sljedeći isječak koda ilustrira kako to možete postići pomoću atributa [DisableCors].

[DisableCors ()]

javni IEnumerable Get ()

   {

      vrati novi niz [] {"Joydip Kanjilal", "Steve Smith"};

   }

Ako koristite ASP.NET Core, trebali biste dodati paket Microsoft.AspNetCore.Cors putem NuGet-a u svoj projekt, a zatim u datoteku Startup.cs napisati sljedeću izjavu za postavljanje podrške za CORS.

javna praznina ConfigureServices (usluge IServiceCollection)

{

    usluge.AddCors ();

}

CORS možete omogućiti pomoću CORS međuopreme - s tim u vezi možete iskoristiti metodu proširenja UseCors. Alternativno, možete omogućiti CORS na razini kontrolera ili radnje pomoću atributa EnableCors na sličan način kao i ranije u ovom članku. Slično tome, za onemogućavanje CORS-a možete koristiti atribut [DisableCors].