So aktivieren Sie CORS in Ihrer Web-API

Sicherheitsbeschränkungen in der Sicherheitsrichtlinie Ihres Browsers verhindern, dass Ihr Webbrowser AJAX-Anforderungen an einen Server in einer anderen Domäne sendet. Dies wird auch als Richtlinie mit gleichem Ursprung bezeichnet. Mit anderen Worten, die integrierte Browsersicherheit verhindert, dass eine Webseite einer Domäne AJAX-Aufrufe für eine andere Domäne ausführt.

Hier hilft CORS (Cross-Origin Resource Sharing). CORS ist ein W3C-Standard, mit dem Sie von derselben Ursprungsrichtlinie abweichen können, die von den Browsern übernommen wurde, um den Zugriff von einer Domäne auf Ressourcen zu beschränken, die zu einer anderen Domäne gehören. Sie können CORS für Ihre Web-API mithilfe des entsprechenden Web-API-Pakets (abhängig von der verwendeten Version der Web-API) oder der OWIN-Middleware aktivieren.

Beachten Sie, dass ein Ursprung einer Anforderung aus einem Schema, einem Host und einer Portnummer besteht. Daher werden zwei Anforderungen als vom selben Ursprung stammend betrachtet, wenn sie dasselbe Schema, denselben Host und dieselbe Portnummer haben. Wenn sich eine dieser Anforderungen unterscheidet, werden die Anforderungen als Kreuzursprung betrachtet, dh sie gehören nicht zu identischen Ursprüngen.

Aktivieren Sie die CORS-Unterstützung in der ASP.NET-Web-API

Die ASP.NET-Web-API bietet hervorragende Unterstützung für CORS. Um CORS in ASP.NET Web API 2 zu unterstützen, müssen Sie das NuGet-Paket Microsoft.AspNet.WebApi.Cors verwenden. Um dieses Paket zu installieren, können Sie den folgenden Befehl über die NuGet-Paketmanagerkonsole ausführen.

Installationspaket Microsoft.AspNet.WebApi.Cors

Alternativ können Sie Ihr Projekt im Projektmappen-Explorer auswählen und das Paket über den NuGet-Paketmanager installieren.

Wenn Sie Web API 1.0 verwenden, können Sie die CORS-Unterstützung aktivieren, einschließlich der folgenden Anweisungen im Application_BeginRequest-Ereignishandler der Datei Global.asax.cs.

HttpContext.Current.Response.AddHeader ("Zugriffskontrolle-Zulassen-Ursprung", allowOrigin); 

HttpContext.Current.Response.AddHeader ("Zugriffssteuerungs-Zulassungsmethoden", "GET, POST");

Beachten Sie, dass "allowOrigin" hier eine Zeichenfolgenvariable ist, die den Ursprung der Anforderung enthält, die auf die Ressource zugreifen möchte. 

Die Unterstützung für CORS kann auf drei Ebenen aktiviert werden. Dazu gehören die folgenden:

  • Aktionsebene
  • Controller-Ebene
  • Globale Ebene

Aktivieren Sie CORS auf globaler Ebene

Um CORS auf globaler Ebene zu aktivieren, müssen Sie die EnableCors-Methode der HttpConfiguration-Klasse nutzen, wie im folgenden Code-Snippet gezeigt.

öffentliches statisches ungültiges Register (HttpConfiguration config)

        {

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

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

            config.EnableCors (cors);

            // Geben Sie hier die Web-API-Konfiguration und -Dienste an

            // Geben Sie hier die Web-API-Routen an          

        }}

    }}

Siehe das oben angegebene Code-Snippet. Beachten Sie, wie der Anforderungsursprung angegeben wurde. Der Parameter * impliziert alle Anforderungsheader. Daher werden GET- und POST-Anforderungen von der angegebenen Domäne akzeptiert und alle anderen Anforderungen abgelehnt.

Aktivieren Sie CORS auf Controller-Ebene

Sie können die CORS-Unterstützung auch auf Controller-Ebene aktivieren. Geben Sie dazu das Attribut [EnableCors] für Ihren Web-API-Controller an, wie unten gezeigt.

  [EnableCors (Ursprung: "// localhost: 50164 /", Header: "*", Methoden: "*")]

    öffentliche Klasse AuthorsController: ApiController

    {  

        // Schreiben Sie hier Ihre Web-API-Controller-Methoden

    }}

Aktivieren Sie CORS auf Aktionsebene

In ähnlicher Weise können Sie CORS auch auf Aktionsebene mit dem Attribut [EnableCORS] aktivieren. Hier ist ein Beispiel, das zeigt, wie dies gemacht wird.

öffentliche Klasse AuthorsController: ApiController

    {

        [EnableCors (Ursprung: "// localhost: 50164 /", Header: "*", Methoden: "*")]

        public IEnumerable Get ()

        {

            neuen String zurückgeben [] {"Joydip Kanjilal", "Steve Smith"};

        }}

    }}

Deaktivieren Sie CORS für eine bestimmte Aktion

Jetzt müssen Sie möglicherweise CORS für eine bestimmte Aktion oder eine Gruppe von Aktionen deaktivieren. Diese Funktion kann nützlich sein, wenn Sie CORS bereits auf globaler Ebene aktiviert haben und sie aus Sicherheitsgründen für eine oder mehrere Aktionen deaktivieren möchten. Das folgende Codefragment zeigt, wie Sie dies mit dem Attribut [DisableCors] erreichen können.

[DisableCors ()]

public IEnumerable Get ()

   {

      neuen String zurückgeben [] {"Joydip Kanjilal", "Steve Smith"};

   }}

Wenn Sie ASP.NET Core verwenden, sollten Sie das Microsoft.AspNetCore.Cors-Paket über NuGet zu Ihrem Projekt hinzufügen und dann die folgende Anweisung in die Datei Startup.cs schreiben, um die CORS-Unterstützung einzurichten.

public void ConfigureServices (IServiceCollection-Dienste)

{

    services.AddCors ();

}}

Sie können CORS mithilfe der CORS-Middleware aktivieren - Sie können diesbezüglich die UseCors-Erweiterungsmethode nutzen. Alternativ können Sie CORS auf dem Controller oder auf den Aktionsebenen mithilfe des EnableCors-Attributs aktivieren, ähnlich wie zuvor in diesem Artikel. In ähnlicher Weise können Sie zum Deaktivieren von CORS das Attribut [DisableCors] verwenden.