web-dev-qa-db-fra.com

L'en-tête 'Access-Control-Allow-Origin' contient plusieurs valeurs '*, *', mais une seule est autorisée.

J'utilise Angular et asp.net API. Le problème auquel je suis confronté: lorsque j'ajoute CORS dans le code de l'API, cela fonctionne sur Internet Explorer mais pas sur Chrome et Firefox.

Voici l'erreur:

XMLHttpRequest ne peut pas charger http: // localhost: 41028/api/values ​​/ abc . Le L'en-tête 'Access-Control-Allow-Origin' contient plusieurs valeurs '*, *', mais un seul est autorisé. Origin ' http: // localhost: 44796 ' est donc accès non autorisé.

C'est le code que j'ai ajouté dans le fichier web.config:

<system.webServer>
...
<httpProtocol>
  <customHeaders>
      <!-- Adding the following custom HttpHeader will help prevent CORS errors -->
      <add name="Access-Control-Allow-Origin" value="*" />
      <add name="Access-Control-Allow-Headers" value="Content-Type" />
  </customHeaders>
</httpProtocol>
...
</system.webServer>

Dans le fichier WebApiConfigFile.cs j'ai ajouté:

var CorsAttribute = new EnableCorsAttribute("* ","* ", "* ");
        config.EnableCors(CorsAttribute);

J'utilise CORS pour la première fois. Toute aide serait appréciée.

15
trigri

Vous définissez CORS deux fois. Je pense que c'est le problème.

Veuillez supprimer tout paramètre CORS. Vous pouvez le supprimer de web.config ou de WebApiConfigFile.cs.

30

Chrome et Firefox utilisent ce que l’on appelle une vérification avant vol à l’aide du verbe "OPTIONS".

Donc, vous devez ajouter "OPTIONS" aux méthodes autorisées dans le fichier web.config. Vous devrez peut-être aussi ajouter du code à la demande Application_Begin, comme le suggère cette réponse: Gestion des demandes de contrôle en amont CORS pour les actions ASP.NET MVC

Voici quelques ressources pour la SCRO:

IIS détourne la demande d'OPTIONS de contrôle en amont de CORS

http://www.asp.net/web-api/overview/security/enabling-cross-Origin-requests-in-web-api

3
Karen B

Toutes les autres solutions fournies pour webAPI. Cette solution est destinée à l'utilisation de Webservice (.asmx) en tant qu'API.

Supprimez les détails 'Access-Control-Allow-Origin' de la fonction begin_request du fichier Global.asax.cs ou de web.config. Parce que ce paramètre doit être dans un seul endroit

1
Sivashankar

J'ai eu ce problème parce que j'ai mis le app.UseCors après ConfigureOAuth. Changer l'ordre résoudre le problème.

    public void Configuration(IAppBuilder app)
    {
        HttpConfiguration config = new HttpConfiguration();

        app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
        ConfigureOAuth(app);

        WebApiConfig.Register(config);

        // Used to put this line after ConfigureAuth(app), 
        // app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);

        app.UseWebApi(config);
    }

Voici le détail dans mon cas:

  • Au début, l'origine n'est pas autorisée dans 'Access-Control-Allow-Origin', lorsque vous appelez \token.
  • LSo j'ajoute customHeader, y compris 'en-têtes de contrôle d'accès-Autoriser-Autoriser', 'en-têtes de contrôle d'accès', 'méthodes de contrôle d'accès-Autoriser' Il a corrigé la requête \token.
  • Mais ensuite, j'ai eu un double 'Access-Control-Allow-Origin' lors de l'appel de l'API de détail. Il y a beaucoup de suggestions, telles que ceci ne pourrait tout simplement pas être corrigée.
0
dichen

J'ai eu le même problème. Après avoir mis le domaine exact au lieu de * (voir ci-dessous), cela a fonctionné pour moi. 

var CorsAttribute = new EnableCorsAttribute (" https://www.mywebsite.com ", "", ""); config.EnableCors (CorsAttribute);

0
Alex W.