2017-09-06 16 views
1

J'utilise une API Core Web et ont mis en place CORS comme suit;Dans ASP.NET, Réponse à la demande prévol ne passe pas vérification de contrôle d'accès: Non « Accès-Control-Allow-Origin » en-tête

public void ConfigureServices(IServiceCollection services) 
    { 
     services.AddCors(); 
     ... 
    } 

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
     { 
var url = Configuration["origenUrl"]; 
      var header = "Content-Type"; 
      app.UseCors(
       options => options.WithOrigins(url).WithHeaders(header).AllowAnyMethod().AllowCredentials() 
      ); 
     } 

Cette configuration fonctionne très bien pour les demandes Get. Mais pour ma demande de vente;

$.ajax({ 
     url: url, 
     method: "PUT", 
     xhrFields: { withCredentials: true } 
    }) 
     .done(callback) 
     //.fail(errorMessage); 
     .fail(function (jqXHR, textStatus, errorThrown) { 
      alert("Something went wrong: " + textStatus + " " + errorThrown); 
      errorCallback(); 
     }); 

Je reçois ce message d'erreur;

XMLHttpRequest ne peut pas charger http://localhost:17972/api/fault/1/close.

La réponse à la demande de contrôle en amont ne passe pas contrôle d'accès contrôle: Non L'en-tête 'Access-Control-Allow-Origin' est présent sur la ressource demandée. Origine « http://localhost:12528 » est donc pas permis accès. La réponse avait le code d'état HTTP 401.

De Fiddler ma demande http est;

OPTIONS http://localhost:17972/api/fault/10/close HTTP/1.1

Accept: /

Origine: http://localhost:12528

Access-Control-Demande-Méthode: PUT

Access-Control-requête- En-têtes: accepter

UA-CPU: AMD64

Accept-Encoding: gzip, dégonfler

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; Trident/7,0; rv: 11.0) comme Gecko

: localhost: 17972

Content-Length: 0

DNT: 1

Connection: Keep-Alive

Pragma: no-cache

Alors, comment puis-je résoudre ce problème?

EDIT J'ai aussi essayé ce code juste pour le faire fonctionner, mais je reçois la même erreur;

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
     { 
      //var url = Configuration["originUrl"]; 
      //app.UseCors(
      // options => options.WithOrigins(url).AllowAnyHeader().AllowAnyMethod().AllowCredentials() 
      //); 
      app.UseCors(
       options => options.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod().AllowCredentials() 
      ); 
      app.UseMvc(); 
} 
+0

Avez-vous ajouté le type de contenu? –

+0

J'ai mis "Content-Type" dans la variable d'en-tête qui est ensuite incluse dans la méthode WithHeaders comme vous pouvez le voir dans le code. J'ai depuis essayé "AnyHeader()" avec le même résultat. – arame3333

+0

Désolé, je n'ai pas expliqué si fin, je parlais de la demande. Avez-vous une requête HTTP brute? –

Répondre

0

Essayez avec AllowAnyHeader au lieu de WithHeaders, cela doit fonctionner. Le problème est que vous avez besoin d'un en-tête "Content-Type", mais qu'il n'est pas envoyé. Si vous veut garder les WithHeaders vérifier, ajouter « Access-Control-Demande-Méthode ».

Plus d'info: https://docs.microsoft.com/en-us/aspnet/core/security/cors

+0

J'ai essayé mais en vain. J'ai regardé le lien - qui est bon - pendant un certain temps essayant de déterminer ce que je peux faire. – arame3333

+0

Vous pouvez également éviter les bibliothèques et ajouter une règle cors dans le web.config ici: https://enable-cors.org/server.html –

+0

Pour essayer de le faire fonctionner, j'utilise maintenant AllowAnyOrigin() mais cela ne résout pas le problème – arame3333