2015-04-08 10 views
8

Sto usando asp.net angolare e API. Il problema che sto affrontando: quando aggiungo CORS nel codice API, funziona su Internet Explorer ma non funziona su Chrome e Firefox.Il 'Access-Control-Allow-Origin' intestazione contiene più valori '*, *', ma è consentito un solo

Ecco l'errore:

XMLHttpRequest cannot load http://localhost:41028/api/values/abc . The 'Access-Control-Allow-Origin' header contains multiple values '*, *', but only one is allowed. Origin ' http://localhost:44796 ' is therefore not allowed access.

Questo è il codice ho aggiunto nel file 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> 

Nel WebApiConfigFile.cs lima ho aggiunto:

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

Sono usando CORS per la prima volta. Qualsiasi aiuto sarà apprezzato.

+2

O aggiungere intestazioni staticamente nel web.config o dinamicamente con l'attributo cors. Non entrambi. –

+0

scusa, puoi spiegare come ho detto che sono nuovo .... con l'esempio? Sono persino nuovo a fare domande sullo stack overflow – trigri

+0

ottenuto grazie per l'aiuto ... :) – trigri

risposta

3

Chrome e Firefox utilizzano quello che è chiamato un controllo pre-volo utilizzando il verbo "Opzioni".

Quindi, si deve aggiungere "Opzioni" per le modalità consentite nel web.config. Si può anche essere necessario aggiungere del codice per la richiesta Application_Begin, come questa risposta suggerisce: Handling CORS Preflight requests to ASP.NET MVC actions

Ecco alcune risorse per CORS:

IIS hijacks CORS Preflight OPTIONS request

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

15

si sta impostando CORS due volte . Penso che questo sia il problema.

Si prega di rimuovere eventuali impostazioni uno CORS. È possibile rimuoverlo da web.config o da WebApiConfigFile.cs.

+0

Sì, questo può essere il problema. –

+0

anche questo era il mio problema. Grazie! –

+0

sì e io anche grazie :) – dazziep

0

Ho riscontrato questo problema perché ho inserito il app.UseCors dopo il ConfigureOAuth. Cambia l'ordine correggi il problema.

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

Ecco dettaglio nel mio caso:

  • All'inizio ho avuto origine non è consentito in 'Access-Control-Allow-Origin', quando si chiama \token.
  • LSO aggiungo il customHeader tra cui 'Access-Control-Allow-Origin', 'Access-Control-Allow-headers', 'access-control-Allow-metodi'. Ha risolto la richiesta \token.
  • Ma poi ho ricevuto il comando "Access-Control-Allow-Origin" quando si chiama api dettagli. Ci sono molti suggerimenti, come ad esempio this, non ho potuto correggere.