1

Lorsque je configure CORS dans mon web.config comme suit, tout fonctionne:CORS multiples travaillant pour GET, mais pas pour PUT/POST avec les requêtes prévol 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> 

Cependant, lorsque je tente pour permettre à plusieurs CORS comme ceci:

// 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); 
} 

il travaille pour la console GET (ie obtenir le contenu, etc.) mais, lors de l'utilisation POST/PUT (c.-à-enregistrement de contenu, etc.), il donne cette erreur dans le navigateur (Chrome)

L'API de récupération ne peut pas charger http://localhost:56214/api/1/content/SAVE. La réponse à la demande de contrôle en amont ne passe pas la vérification du contrôle d'accès: aucun en-tête «Access-Control-Allow-Origin» n'est présent sur la ressource demandée. L'origine 'http://localhost:3000' n'est donc pas autorisée. Si une réponse opaque répond à vos besoins, définissez le mode de la requête sur 'no-cors' pour récupérer la ressource avec CORS désactivé.

La demande échoue sur OPTIONS. Veuillez noter que j'ai des gestionnaires personnalisés et mes itinéraires sont également configurés. Encore une chose à mentionner est que l'appel PUT/POST pour enregistrer le contenu est un appel ajax via réagir. Cela peut-il être un problème?

Répondre

0

Le problème est la barre oblique finale dans votre deuxième URL. Changez à cela et cela fonctionne:

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

avez-vous essayé d'enlever l'espace vide à l'accès-Control-Allow-Méthodes comme

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