Ich verwende AngularJS $ http auf der Clientseite, um auf einen Endpunkt einer ASP.NET-Web-API-Anwendung auf der Serverseite zuzugreifen. Da der Client in einer anderen Domäne als der Server gehostet wird, benötige ich CORS. Es funktioniert für $ http.post (URL, Daten). Sobald ich den Benutzer authentifiziere und eine Anfrage über $ http.get (url) stelle, erhalte ich die Nachricht
Der Header 'Access-Control-Allow-Origin' enthält mehrere Werte 'http://127.0.0.1:9000, http://127.0.0.1:9000', aber nur einer ist zulässig. Origin 'http://127.0.0.1:9000' ist daher kein Zugriff gestattet.
Fiddler zeigt mir, dass die get-Anfrage nach einer erfolgreichen Optionsanforderung tatsächlich zwei Header-Einträge enthält. Was und wo mache ich etwas falsch?
Aktualisieren
Wenn ich jQuery $ .get anstelle von $ http.get verwende, wird dieselbe Fehlermeldung angezeigt. Dies scheint also kein Problem mit AngularJS zu sein. Aber wo ist es falsch?
asp.net-web-api
cors
angularjs-http
Papa Mufflon
quelle
quelle
Antworten:
Ich fügte hinzu
config.EnableCors(new EnableCorsAttribute(Properties.Settings.Default.Cors, "", ""))
ebenso gut wie
app.UseCors(CorsOptions.AllowAll);
auf dem Server. Dies führt zu zwei Header-Einträgen. Verwenden Sie einfach die letztere und es funktioniert.
quelle
Wir sind auf dieses Problem gestoßen, weil wir CORS gemäß den Best Practices eingerichtet hatten (z. B. http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api ) UND AUCH hatte einen benutzerdefinierten Header
<add name="Access-Control-Allow-Origin" value="*"/>
in web.config.Entfernen Sie den Eintrag web.config, und alles ist in Ordnung.
Im Gegensatz zu @ mwws Antwort haben wir immer noch
EnableCors()
in der WebApiConfig.cs UND eineEnableCorsAttribute
auf dem Controller. Als wir den einen oder anderen herausgenommen haben, sind wir auf andere Probleme gestoßen.quelle
Ich verwende Cors 5.1.0.0. Nach vielen Kopfschmerzen habe ich festgestellt, dass das Problem darin besteht, dass die Header Access-Control-Allow-Origin und Access-Control-Allow-Header vom Server dupliziert werden
Aus
config.EnableCors()
der Datei WebApiConfig.cs entfernt und nur das[EnableCors("*","*","*")]
Attribut für die Controller-Klasse festgelegtWeitere Informationen finden Sie in diesem Artikel .
quelle
Zur Registrierung hinzufügen WebApiConfig
Oder web.config
ABER NICHT BEIDE
quelle
Eigentlich können Sie nicht mehrere Header setzen
Access-Control-Allow-Origin
(oder zumindest funktioniert es nicht in allen Browsern). Stattdessen können Sie eine Umgebungsvariable bedingt festlegen und dann in derHeader
Direktive verwenden:In diesem Beispiel wird der Antwortheader nur hinzugefügt, wenn ein Anforderungsheader
Origin
mit RegExp übereinstimmt:^(https?://localhost|https://[a-z]+\.my\.base\.domain)$
(Dies bedeutet im Grunde localhost über HTTP oder HTTPS und * .my.base.domain über HTTPS).Denken Sie daran, das
setenvif
Modul zu aktivieren .Docs:
Übrigens. Das
}e
In%{ORIGIN_SUB_DOMAIN}e
ist kein Tippfehler. So verwenden Sie Umgebungsvariablen in derHeader
Direktive.quelle
Auch ich hatte sowohl OWIN als auch meine WebAPI, für die beide anscheinend CORS separat aktiviert haben mussten, was wiederum den
'Access-Control-Allow-Origin' header contains multiple values
Fehler verursachte.system.webServer
Am Ende habe ich ALLEN Code entfernt, der CORS aktiviert hat, und dann dem Knoten meiner Web.Config Folgendes hinzugefügt:Dadurch wurden die CORS-Anforderungen für OWIN (Anmeldung zulassen) und WebAPI (API-Aufrufe zulassen) erfüllt, es entstand jedoch ein neues Problem:
OPTIONS
Während des Preflights konnte für meine API-Aufrufe keine Methode gefunden werden. Die Lösung dafür war einfach: Ich musste nur Folgendes vomhandlers
Knoten my Web.Config entfernen:Hoffe das hilft jemandem.
quelle
Apache Server:
Ich gebe das gleiche aus, aber es lag daran, dass ich keine Anführungszeichen (") für das Sternchen in meiner Datei hatte, das den Zugriff auf den Server ermöglichte, z. B." .htaccess ".
Möglicherweise haben Sie auch eine Datei '.htaccess' in einem Ordner mit einem anderen '.htaccess', z
In Ihrem Fall ist anstelle von '*' das Sternchen der ip (
http://127.0.0.1:9000
) - Server, auf dem Sie die Berechtigung zum Bereitstellen von Daten erteilen.ASP.NET:
Stellen Sie sicher, dass Ihr Code kein Duplikat "Access-Control-Allow-Origin" enthält.
Entwicklerwerkzeuge:
Mit Chrome können Sie Ihre Anforderungsheader überprüfen. Drücken Sie die Taste F12 und gehen Sie zur Registerkarte "Netzwerk". Führen Sie nun die AJAX-Anforderung aus. Sie wird in der Liste angezeigt. Klicken Sie auf und geben Sie alle dort enthaltenen Informationen an.
quelle
Dies geschieht, wenn Sie die Cors-Option an mehreren Standorten konfiguriert haben. In meinem Fall hatte ich es sowohl auf Controller-Ebene als auch in Startup.Auth.cs / ConfigureAuth.
Mein Verständnis ist, wenn Sie es anwendungsweit möchten, konfigurieren Sie es einfach unter Startup.Auth.cs / ConfigureAuth wie folgt ... Sie benötigen einen Verweis auf Microsoft.Owin.Cors
Wenn Sie es lieber auf Controller-Ebene halten, können Sie es einfach auf Controller-Ebene einfügen.
quelle
Wenn Sie sich in IIS befinden, müssen Sie CORS in web.config aktivieren, und Sie müssen es nicht in der Registrierungsmethode App_Start / WebApiConfig.cs aktivieren
Meine Lösung war, kommentierte die Zeilen hier:
und schreibe in die web.config:
quelle
Dies kann natürlich auch passieren, wenn Sie Ihren
Access-Control-Allow-Origin
Header tatsächlich auf mehrere Werte festgelegt haben - z. B. eine durch Kommas getrennte Liste von Werten, die im RFC unterstützt wird, von den meisten gängigen Browsern jedoch nicht unterstützt wird. Beachten Sie, dass der RFC darüber spricht, wie Sie mehr als eine Domain zulassen können, ohne auch '*' zu verwenden.Sie können diesen Fehler beispielsweise in Chrome mithilfe eines Headers wie folgt erhalten:
Access-Control-Allow-Origin: http://test.mysite.com, http://test2.mysite.com
Das war in
Chrome Version 64.0.3282.186 (Official Build) (64-bit)
Beachten Sie, dass Sie, wenn Sie dies aufgrund eines CDN in Betracht ziehen und Akamai verwenden, möglicherweise beachten möchten, dass Akamai bei der Verwendung nicht auf dem Server zwischengespeichert wird
Vary:Origin
, wie es viele zur Lösung dieses Problems vorschlagen.Wahrscheinlich müssen Sie die Erstellung Ihres Cache-Schlüssels mithilfe des Antwortverhaltens "Cache ID Modification" ändern. Weitere Details zu diesem Problem finden Sie in dieser verwandten StackOverflow-Frage
quelle
Access-Control-Allow-Origin: http://test.mysite.com http://test2.mysite.com
. Das wäre der richtige Weg, aber Browser folgen hier nicht dem Standard ( Quelle ).So dumm und einfach:
Dieses Problem trat bei mir auf, als ich zwei Mal
Header always set Access-Control-Allow-Origin *
in meiner Apache-Konfigurationsdatei war. Einmal mit denVirtualHost
Tags und einmal in einemLimit
Tag:Durch Entfernen eines Eintrags wurde das Problem behoben.
Ich denke, im ursprünglichen Beitrag wäre es zweimal gewesen:
quelle
Hatte gerade dieses Problem mit einem NodeJS-Server.
Hier ist, wie ich es behoben habe.
Ich starte meinen Knotenserver über a
nginx proxy
und setze nginx undnode
auf beideallow cross domain requests
und es hat mir nicht gefallen, also habe ich ihn aus nginx entfernt und im Knoten belassen und alles war gut.quelle
rack-cors
Edelstein das CORS-Zeug erledigen. Bam, behoben.Ich habe das gleiche Problem und dies habe ich getan, um es zu lösen:
Im WebApi-Dienst habe ich in Global.asax den folgenden Code geschrieben:
Hier erlaubt dieser Code nur vor dem Flug und bei der Token-Anforderung, "Access-Control-Allow-Origin" in die Antwort aufzunehmen, andernfalls füge ich ihn nicht hinzu.
Hier ist mein Blog über die Implementierung: https://ibhowmick.wordpress.com/2018/09/21/cross-domain-token-based-authentication-with-web-api2-and-jquery-angular-5-angular- 6 /
quelle
Für diejenigen, die IIS mit PHP verwenden, aktualisieren Sie auf IIS it serverseitig die Datei web.config im Stammverzeichnis (wwwroot) und fügen Sie diese hinzu
Geben Sie nach dem Neustart des IIS-Servers IISReset in RUN ein und geben Sie ein
quelle
Hier ist eine weitere Instanz ähnlich den obigen Beispielen, in der möglicherweise nur eine Konfigurationsdatei definiert ist, in der sich CORS befindet: Auf dem IIS-Server befanden sich zwei web.config-Dateien auf dem Pfad in verschiedenen Verzeichnissen, von denen eine im virtuellen Verzeichnis ausgeblendet war. Um dies zu lösen, habe ich die Konfigurationsdatei auf Stammebene gelöscht, da der Pfad die Konfigurationsdatei im virtuellen Verzeichnis verwendete. Müssen den einen oder anderen wählen.
quelle
Der Header 'Access-Control-Allow-Origin' enthält mehrere Werte
Als ich diesen Fehler erhielt, verbrachte ich Tonnen von Stunden damit, nach einer Lösung dafür zu suchen, aber nichts funktioniert. Schließlich fand ich eine Lösung für dieses Problem, die sehr einfach ist. Wenn der Header "Access-Control-Allow-Origin" mehr als einmal zu Ihrer Antwort hinzugefügt wurde, tritt dieser Fehler auf. Überprüfen Sie die serverseitige Skriptdatei apache.conf oder httpd.conf (Apache-Server) und entfernen Sie unerwünschte Eintragsheader aus diesen Dateien .
quelle