Så här aktiverar du CORS på ditt webb-API

Säkerhetsrestriktioner för din webbläsares säkerhetspolicy hindrar din webbläsare från att göra AJAX-förfrågningar till en server i en annan domän. Detta kallas också policy för samma ursprung. Med andra ord förhindrar den inbyggda webbläsarsäkerheten att en webbsida för en domän utför AJAX-samtal på en annan domän.

Här kommer CORS (resursdelning mellan källor) till undsättning. CORS är en W3C-standard som låter dig komma bort från samma ursprungspolicy som webbläsarna antagit för att begränsa åtkomst från en domän till resurser som tillhör en annan domän. Du kan aktivera CORS för ditt webb-API med respektive webb-API-paket (beroende på vilken version av webb-API som används) eller OWIN-mellanprogram.

Observera att ursprunget till en begäran består av ett schema, en värd och ett portnummer. Så två förfrågningar anses ha samma ursprung om de har samma schema, värd och portnummer. Om någon av dessa skiljer sig åt anses förfrågningarna vara korsor, dvs. inte tillhör identiska ursprung.

Aktivera CORS-stöd i ASP.NET Web API

ASP.NET Web API ger utmärkt stöd för CORS. För att ge stöd för CORS i ASP.NET Web API 2 måste du använda paketet Microsoft.AspNet.WebApi.Cors NuGet. För att installera det här paketet kan du utföra följande kommando från NuGet-pakethanterarkonsolen.

Installationspaket Microsoft.AspNet.WebApi.Cors

Alternativt kan du välja ditt projekt i Solution Explorer-fönstret och installera paketet via NuGet-pakethanteraren.

Om du använder Web API 1.0 kan du aktivera CORS-stöd inklusive följande uttalanden i Application_BeginRequest-händelsehanteraren i filen Global.asax.cs.

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

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

Observera att ”allowOrigin” här är en strängvariabel som innehåller ursprunget för den begäran som vill komma åt resursen. 

Stöd för CORS kan aktiveras på tre nivåer. Dessa inkluderar följande:

  • Åtgärdsnivå
  • Kontrollnivå
  • Global nivå

Aktivera CORS på global nivå

För att aktivera CORS på global nivå måste du dra nytta av EnableCors-metoden i klassen HttpConfiguration som visas i kodavsnittet nedan.

public static void Register (HttpConfiguration config)

        {

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

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

            config.EnableCors (cors);

            // Ange konfigurationen och tjänsterna för webb-API här

            // Ange Web API-rutter här          

        }

    }

Se kodavsnittet ovan. Observera hur begärans ursprung har specificerats. Parametern * innefattar alla förfrågningsrubriker. Så, GET- och POST-förfrågningar från den angivna domänen accepteras, alla andra förfrågningar avvisas.

Aktivera CORS på kontrollnivå

Du kan också aktivera CORS-stöd på kontrollnivå. För att göra detta anger du attributet [EnableCors] till din webb-API-styrenhet enligt nedan.

  [EnableCors (ursprung: "// localhost: 50164 /", rubriker: "*", metoder: "*")]

    public class AuthorsController: ApiController

    {  

        // Skriv dina webb-API-kontrollmetoder här

    }

Aktivera CORS på åtgärdsnivå

På samma sätt kan du också aktivera CORS på åtgärdsnivå med attributet [EnableCORS]. Här är ett exempel som illustrerar hur detta görs.

public class AuthorsController: ApiController

    {

        [EnableCors (ursprung: "// localhost: 50164 /", rubriker: "*", metoder: "*")]

        offentlig IEnumerable Get ()

        {

            returnera ny sträng [] {"Joydip Kanjilal", "Steve Smith"};

        }

    }

Inaktivera CORS för en specifik åtgärd

Nu kan du behöva inaktivera CORS för en specifik åtgärd eller en grupp av åtgärder. Den här funktionen kan vara praktisk när du redan har aktiverat CORS på global nivå och du nu vill inaktivera den av en eller flera åtgärder av säkerhetsskäl. Följande kodavsnitt illustrerar hur du kan uppnå detta med attributet [DisableCors].

[DisableCors ()]

offentlig IEnumerable Get ()

   {

      returnera ny sträng [] {"Joydip Kanjilal", "Steve Smith"};

   }

Om du använder ASP.NET Core bör du lägga till Microsoft.AspNetCore.Cors-paketet via NuGet till ditt projekt och sedan skriva följande uttalande i filen Startup.cs för att ställa in CORS-stöd.

public void ConfigureServices (IServiceCollection services)

{

    tjänster.AddCors ();

}

Du kan aktivera CORS med CORS middleware - du kan dra nytta av UseCors-förlängningsmetoden i detta avseende. Alternativt kan du aktivera CORS på styrenheten eller åtgärdsnivåerna med attributet EnableCors på samma sätt som vi gjorde tidigare i den här artikeln. På samma sätt kan du använda attributet [DisableCors] för att inaktivera CORS.