2016-11-28 2 views
0

Ich baue eine Angular-App, die ng-Ressource verwendet. Die Service API ist in Asp.Net Core Web API erstellt und das CORS ist bereits aktiviert.Cors Problem tritt nur auf, wenn "Put"?

The service.js Code

.factory('D2Service', ['$resource', function ($resource) { 
    return $resource('http://localHost:5001/api/D2/:id', 
     { id: '@id' }, 
     { 
      update: { method: 'PUT' } 
     }); 
}]) 

jedoch der Anruf D2Service.update(model.d); in Controller bekam die folgende Fehlermeldung.

XMLHttpRequest kann http://localhost:5001/api/D2 nicht laden. Die Antwort auf die Preflight-Anforderung übergibt die Zugriffskontrollprüfung nicht: Auf der angeforderten Ressource ist kein Header "Access-Control-Allow-Origin" vorhanden. Ursprung 'http://localhost:8082' ist daher nicht erlaubt.

Aber D2Service.get({ id: model.id }).... läuft ohne Fehler. Warum hat das "PUT" das CORS-Problem, während das "GET" in Ordnung ist?

Folgendes ist die Anfrage/Antwort beim Überwachen mit Fiddler.

Anfrage:

OPTIONS http://localhost:5001/api/D2 HTTP/1.1 
Host: localhost:5001 
Connection: keep-alive 
Access-Control-Request-Method: PUT 
Origin: http://localhost:8082 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36 
Access-Control-Request-Headers: content-type 
Accept: */* 
Referer: http://localhost:8082/ 
Accept-Encoding: gzip, deflate, sdch, br 
Accept-Language: en-US,en;q=0.8 

Antwort:

HTTP/1.1 204 No Content 
Date: Sun, 27 Nov 2016 23:32:31 GMT 
Server: Kestrel 
+0

richtig CORS zu unterstützen, Ihren Server Bedürfnisse auf Preflight-Anfragen antworten (OPTIONS) - so funktioniert CORS –

+0

Wie lässt sich der Server auf Preflight-Anfragen reagieren? Ich benutze Asp.net Core auf Dotnet Core. – ca9163d9

+0

das ist, wofür Google ist - zu suchen, wie man diese Dinge tut - https://docs.microsoft.com/en-us/aspnet/core/security/cors –

Antwort

0

Für Preflight-Anfrage in Ihrem response folgenden Header arbeiten Sie haben sollten:

Access-Control-Allow-Origin: YOUR_DOMAIN 
Access-Control-Request-Method: PUT 
Access-Control-Request-Headers: YOUR_CUSTOM_HEADERS 
+0

Wie ngResource Aufruf hat die Überschrift von 'Access-Control-Allow-Origin' zu machen? Es fehlt in den Anforderungsheadern. – ca9163d9

+0

das sollte ein Antwort-Header sein und sollte in Ihrem Server –

+0

eingestellt werden Jetzt verwende ich Nodejs, um die eckige App hosten. Ich gehe einfach in den Ordner und 'npm start'. Ich habe 'Access-Control-Allow-Origin' im Projekt gesucht und die einzige gefundene Datei ist' .htaccess' unter dem Ordner 'bower_components \ html5-bleeplate \ dist' – ca9163d9