WCF Web API-RESTful ist nicht erlaubt, Access-Control-Allow-Origin
Scheint, wie ich eine cross-domain-problem.
Ich habe einige Lösungen gesehen, die darauf hinweist hinzufügen "Access-Control-Allow-Origin: *", aber ich weiß nicht, wo ich dies tun kann.
Brauche ich, um einige handler?
Ich bin mit WCF Web API.
Fehler: XMLHttpRequest cannot load http://localhost:8081/Song/0. Herkunft http://localhost:8080 ist nicht erlaubt, Access-Control-Allow-Origin.
BEARBEITEN
Habe ich bemerkt, dass dies nur passiert, wenn die HTTP-Methode PUT oder DELETE.
Ich kann mich erfolgreich machen, die Anfragen mit GET oder POST.
Ich mache den request mit jquery.
$.ajax({
url: Settings.RESTfulEndPointFor('Song/' + songID),
type: 'DELETE',
success: function (response) {
callback(response);
}
});
Ich weiß nicht warum, aber es scheint, dass sich dadurch die Methode OPTIONEN mit Access-Control-Request-Methode: LÖSCHEN.
Nicht jeder weiß, was dies verursacht?
Jede Hilfe ist willkommen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich hatte dieses problem bei der Verbindung mit einem WCF-Rest-Dienst via AJAX-calls
Mein javascript war:
Mein service-Endpunkt wurde eröffnet mit diesem code
Alle wichtigen Daten gespeichert in der App.config-Datei, ich habe nicht zu ändern, dass die Datei für dieses Update.
Ich wusste, dass ich hatte, um die Header irgendwo, bevor der Antwort-Nachricht gesendet wurde.
Nach einigem suchen und hacking fand ich die Authorization-Eigenschaft des ein ServiceHost-Objekt. Der Authorization-Eigenschaft ist eine Instanz der "serviceauthorization" - Verhalten Klasse, deren Objekte haben eine Eigenschaft namens ServiceAuthorizationManager, die eine Instanz der ServiceAuthorizationManager Klasse.
Durch die Schaffung einer neuen Klasse, die erbt von der ServiceAuthorizationManager und Einstellung der ServiceAuthorizationManager Eigenschaft der Berechtigung Verhalten der ServiceHost-Instanz, können Sie fangen alle Anrufe auf Ihren service.
Dies ist, wie ich, umgesetzt haben meine Klasse
dann gleich nach ich erkläre meine ServiceHost-Objekt (bevor der host geöffnet ist) füge ich diese Zeile
Danach, den Wiederaufbau und die Ausführung meiner Dienstleistung die Fehler Meldung beendet angezeigt. Hurra!
Schließlich Las ich einen Artikel, der beschrieb die ServiceHost-Klasse wurde für die SOAP/WSDL-Dienstleistungen, die nicht von RESTful services. Für RESTful-Dienste, die WebServiceHost Objekt verwendet werden soll.
So
wird
Müssen Sie Verweise auf die folgenden Assemblys:
Hoffe, das hilft.
Quellen:
Normalerweise setzen Sie diese in den header der Antwort. So legen Sie es in der Kopfzeile, wo Sie ändern/einfügen anderen header-Werte, wie dies
Punkt ist Ihre Antwort sollten Sie diesen header.
Den Wunsch, Sie zu sehen sind mit den OPTIONEN-Methode und einem Access-Control-Request-Methode: LÖSCHEN der header ist ein "preflight-request". Die CORS-Spezifikation erfordert dies bei Anfragen, mit Methoden, die Nebenwirkungen haben (wie LÖSCHEN), um sicherzustellen, die Ressource ist ok mit der Anfrage.
In diesem Abschnitt prüfen der spec >>
http://www.w3.org/TR/cors/#cross-origin-request-with-preflight0
Ich weiß leider nicht, wie man diese Art von Anfrage die Arbeit mit wcf web api.
Habe ich erstellt
und für jede Antwort bin ich die Registrierung dieser header:
Habe ich diese Arbeit mit den folgenden Antwort-Header:
Zuerst, mit den meisten web-Browsern gibt es keinen Weg, um tatsächlich bekommen, um die cross-domain-Einschränkung. Die meisten werden nicht einmal lassen Sie die "accept" - header. So verwenden Sie die JSONP. JSONP ist ein Weg, um JSON-Daten von cross-domain-service, aber es ist wieder in form eines javascript-snippet - was erlaubt ist. Die Weise, die es funktioniert, ist, dass Sie die callback-Funktion den Namen der service, dann die cross-domain-service liefert ein einfaches javascript mit dem eigentlichen JSON-Werte wie die Parameter der callback-Funktion. Dies ist wirklich einfach zu tun, jetzt mit WCF WebApi (Vorschau 6). Installieren Sie es in VS 2010 mit NuGet. Nachdem Sie es installiert haben, suchen Sie hier für weitere Informationen.