1

fordert Als ich CORS in meinem Web.config konfigurieren wie folgt, alles funktioniert:Multiple CORS für GET funktioniert, aber nicht für PUT/POST mit pre-flight Web api 2

<customHeaders> 
<add name="Access-Control-Allow-Origin" value="http://localhost:3000"/> 
<add name="Access-Control-Allow-Methods" value="GET, PUT, POST, DELETE, HEAD, OPTIONS"/> 
<add name="Access-Control-Allow-Headers" value="accept, cache-control, credentials, content-type, authorization, origin, X-Requested-With, X-dev-mode"/> 
</customHeaders> 

aber wenn ich versuche, mehr CORS wie diese zu aktivieren:

// Filename: Global.asax.cs 
protected override void Application_Start() 
{ 
    ApiConfig.Register(GlobalConfiguration.Configuration); 
} 

// Filename: ApiConfig.cs 
public static void Register(HttpConfiguration config) 
{ 
    var cors = new EnableCorsAttribute("http://localhost:3000,http://someOtherUrl.com/", "*", "*"); 
    config.EnableCors(cors); 
} 

es ist für GET funktioniert (dh immer Inhalt, usw.), aber, wenn POST/PUT (dh Speicher Inhalt, usw.) gibt es diesen Fehler in Browser (Chrome) Konsole

Abruf-API kann nicht geladen werden http://localhost:56214/api/1/content/SAVE. Die Antwort auf die Preflight-Anforderung übergibt die Zugriffskontrollprüfung nicht: Auf der angeforderten Ressource ist kein Header "Access-Control-Allow-Origin" vorhanden. Origin 'http://localhost:3000' ist daher nicht erlaubt. Wenn eine undurchsichtige Antwort Ihren Anforderungen entspricht, stellen Sie den Modus der Anfrage auf "Nein", um die Ressource mit deaktiviertem CORS zu holen.

Die Anforderung schlägt bei OPTIONEN fehl. Bitte beachten Sie, dass ich benutzerdefinierte Handler habe und meine Routen auch konfiguriert sind. Noch eine Sache zu erwähnen ist, dass der PUT/POST-Aufruf zum Speichern von Inhalten ein Ajax-Aufruf über react ist. Kann das ein Problem sein?

Antwort

0

Das Problem ist der Schrägstrich in Ihrer zweiten URL. Ändern Sie ihn auf diese und es funktioniert:

var cors = new EnableCorsAttribute("http://localhost:3000,http://someOtherUrl.com", "*", "*"); 
0

haben Sie versucht, den Leerraum zu entfernen, um die Access-Control-Allow-Methoden wie

<add name="Access-Control-Allow-Methods" value="GET,POST,PUT,DELETE,OPTIONS" /> 
Verwandte Themen