asp.net - tutorial - webapi cors enable




So lassen Sie die interne MVC Web-API von einer externen Site außerhalb des Netzwerks zu (2)

Ich habe eine MVC-Web-API (gehostet in IIS), die sich im Ordner wwwroot befindet und lokal im Netzwerk verfügbar ist. Ich kann API-Aufrufe wie http://mylocalapi:133/api/Values/Get ausführen: http://mylocalapi:133/api/Values/Get und ich erhalte ein Ergebnis .

Ich habe eine externe Site, die http://example.org lautet, und möchte dieselbe http://mylocalapi:133/api/Values/Get ausführen.

Sowohl die externe als auch die interne API-Site werden auf demselben Server gehostet (sie können sich jedoch unterscheiden, z. B. von einem Drittanbieter außerhalb des Netzwerks).

Ich habe CORS folgendermaßen in meiner API eingerichtet:

[EnableCors(origins: "http://example.org", headers: "*", methods: "*")]

Aber ich bekomme immer wieder den folgenden Fehler:

XMLHttpRequest cannot load http://mylocalapi:133. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://example.org' is therefore not allowed access.

Um das zu APICALLS , habe ich ein virtuelles Verzeichnis ( APICALLS ) auf meiner externen Site erstellt und eine web.config-Datei erstellt, die auf die lokale IIS-Site verweist:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <httpRedirect enabled="true" destination="http://mylocalapi:133" exactDestination="true" />
    </system.webServer>
</configuration>

Wenn ich das tue, versuche ich, auf die API wie folgt zuzugreifen: http://example.org/APICALLS/api/Values/Get aber ich erhalte die folgende Fehlermeldung:

XMLHttpRequest cannot load http://mylocalapi:133. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://example.org' is therefore not allowed access.

Was mache ich falsch und wie kann ich das Problem beheben?


Fügen Sie den folgenden Code in Ihrer WebApiConfig-Klasse in der Register-Methode hinzu

config.EnableCors();

Sie können nicht über JavaScript auf eine interne Site zugreifen, da JavaScript auf dem Computer des Endbenutzers außerhalb Ihres internen Netzwerks clientseitig ausgeführt wird. Die einzige Möglichkeit, die API über JavaScript aufzurufen, besteht darin, entweder 1) die API dem externen Netzwerk auszusetzen oder 2) einen Proxy auf Ihrer externen Site zu erstellen.

Der Proxy ist im Grunde eine Aktion oder Aktionen, die externen Zugriff bieten und dann die Aufrufe an Ihre interne API übertragen. Im einfachsten Fall können Sie eine einzelne Aktion ausführen, die im Grunde auf Folgendes reagiert:

https://foo.com/api?endpoint=/internal/api/endpoint/&someParam=foo

Die Aktion würde dann diese Informationen in die Abfragezeichenfolge übernehmen und diese verwenden, um eine Anforderung an Ihre interne API über so etwas wie HttpClient . Durch diesen Ansatz wird jedoch Ihre gesamte interne API ziemlich offen gelegt, sodass Sie sie an diesem Punkt genauso gut nach außen verschieben können. Der bessere Ansatz wäre, bestimmte Endpunkte (Aktionsmethoden) für bestimmte interne API-Aufrufe zu erstellen, die Sie über JavaScript vornehmen müssen.

AKTUALISIEREN

Es ist schwierig, Ihnen hier eine echte Richtung ohne Kontext zu geben. Angenommen, es gibt einen internen API-Endpunkt, der eine Liste von Widgets zurückgibt, und Sie möchten diese Liste von Widgets über AJAX abrufen. Sie benötigen etwas wie:

public async Task<ActionResult> GetWidgets()
{
    // fetch widgets from internal API via HttpClient
    return Json(widgets, JsonRequestBehavior.AllowGet);
}

Dann würde Ihr AJAX die URL für diese Aktionsmethode auf Ihrer Website aufrufen, die im Verborgenen die interne API aufruft.





cors