2017-06-08 6 views
3

Ich habe eine serverseitige RESTful-API, die in C# Targeting .NET Framework 4.5.1 und erstellt wurde die CORS Konfiguration ich habe nicht erscheint arbeiten ...Kein 'Access-Control-Allow-Origin'-Header ist vorhanden - asp.net Core Web API-Targeting .net Framework 4.5.1

public void ConfigureServices(IServiceCollection services) { 

     services.AddCors(options => { 
      options.AddPolicy("AllowAll", 
        builder => { 
         builder.AllowAnyOrigin() 
           .AllowAnyMethod() 
           .AllowAnyHeader() 
           .AllowCredentials(); 
        }); 
     }); 

     // Add framework services. 
     services.AddMvc(); 
     services.AddOptions(); 
    } 

public void Configure(IApplicationBuilder app, IHostingEnvironment env, 
ILoggerFactory loggerFactory) { 
     loggerFactory.AddConsole(Configuration.GetSection("Logging")); 
     loggerFactory.AddDebug(); 

     if (env.IsDevelopment()) { 
      app.UseDeveloperExceptionPage(); 
     } 

     var options = new JwtBearerOptions { 
      Audience = "MyAudience" 
      Authority = "MyAuthority" 
     }; 

     app.UseJwtBearerAuthentication(options); 
     app.UseCors("AllowAll"); 
     app.UseMvc(); 
    } 

Jedes Mal, wenn ich in meinem Controller

[Authorize] 
[HttpGet] 
public Task<JsonResult> Get() { 

ICollection<string> abc; 
try { 
    abc = new List<string>(){"A", "B", "C"}; 
} catch (Exception) { 
    abc = null; 
} 
return Json(abc); 
} 

einen Aufruf an die unten API machen zu werden bekomme ich folgende Fehler ...

"XMLHttpRequest kann nicht l oad x Die Antwort auf die Preflight-Anforderung übergibt die Zugriffskontrollprüfung nicht: Auf der angeforderten Ressource ist kein Header 'Access-Control-Allow-Origin' vorhanden. Origin 'x' ist daher nicht erlaubt. Die Antwort hatte den HTTP-Statuscode 502. "

Die http-Anfrage von meinem Client hat einen" Authorization "-Header drin, weshalb eine Preflight-Antwort ausgelöst wird, es hat ein gültiges Token etc ... also hat es nichts zu tun

In der Tat, wenn ich die exakt gleiche RESTful API für .NET Core 1.0 entwickle, funktioniert es wie erwartet, was mich glauben lässt, dass es entweder ein Problem mit CORS und Targeting für .NET Framework 4.5.1 gibt oder es gibt jetzt einige explizite Logik, die ich hinzufügen muss, die sonst implizit von .NET Core 1.0 behandelt wird.

Mein Verständnis ist, dass die CORS Middleware all dies behandeln sollte, weiß jemand, was das Problem sein könnte h ehe?

EDIT:

Ich vergaß zu erwähnen, dass dieser feinen Lauf als localhost funktioniert, ich nur dieses Problem sehen, nach der Bereitstellung. Außerdem habe ich dieses Targeting .NET Framework 4.6.2 getestet und das Problem ist geblieben.

+0

I * * kann in das gleiche Problem ausgeführt haben. Mit CORS können Sie keine Anmeldeinformationen angeben, wenn der Ursprung "any" ist. Um Anmeldeinformationen mit CORS zu verwenden, müssen Sie bestimmte erlaubte Ursprünge identifizieren. Ich bin mir nicht sicher, ob das dein Problem ist. Ich verwende .Net 4.6.2 mit CORS. – Amy

+0

Weitere Informationen zu diesem Punkt finden Sie unter [MDN] (https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS): "Wenn der Server auf eine Anmeldungsanforderung antwortet, muss er einen Ursprung angeben im Wert des Headers Access-Control-Allow-Origin statt den Platzhalter "*" anzugeben. " – Amy

+0

@Amy Ich habe die Antwort-Header überprüft und sie sind genau das, was sie sein müssen, was mich glauben lässt, dass die CORS-Middleware ihre Arbeit vielleicht teilweise erledigt, Access-Control-Allow-Credentials: true und Access-Control-Allow-Origin : http: // Etwas: Portnummer. Ich habe vergessen zu erwähnen, das funktioniert gut auf localhost ausgeführt, aber wenn es bereitgestellt wird, sehe ich den Fehler. Ich habe auch versucht, auf .NET Framework 4.6.2 zu aktualisieren, aber ich sehe das gleiche Problem. – Daz

Antwort

3

Dies wurde behoben.

https://github.com/aspnet/Tooling/blob/master/known-issues-vs2017.md#aspnet-core-known-issues

Verschiedene Versionen von Visual Studio 2017 wurden verwendet und einige Projekte \ Abhängigkeiten zielten .Net-Core 1.0 und andere zielten .Net-Core 1.1, die unterschiedlichen Laufzeiten verursacht benötigt werden.

Sobald wir mit der neuesten Version von VS2017 (15.2.26430.13) synchronisiert, gezielte .Net Core 1.1 und installiert die neue Laufzeit auf dem Server das Problem ging weg.

Der CORS Fehler oben war actaully eine Nebenwirkung eines 502 (Bad Request) Fehler, die ich in der Aufrufliste fehlt ...

Verwandte Themen