2015-03-17 11 views
32

Ich möchte CORS auf einer API mit ASP.NET Core MVC aktivieren, aber alle aktuellen Dokumente beziehen sich auf frühere Versionen dieses Framework .Wie aktivieren Sie Cross-Ursprungsanforderungen (CORS) in ASP.NET Core MVC

+0

Wie wäre das? http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api – lcryder

+0

Wie in den "neuen" Dokumenten dokumentiert: http: //docs.asp. net/de/latest/security/cors.html und http://mvc.readthedocs.org/en/latest/security/cors-policy.html – Daniel

+0

Bitte schauen Sie hier: https: //neelbhhatt40.wordpress. com/2015/09/10/was-ist-kors-und-wie-zu-enable-it-in-asp-net-5vnext/ – Neel

Antwort

28

Die Anmerkungen zu den neuen Cors-Funktionen sind sehr leicht, aber ich konnte es durch die neuen Klassen und Methoden in meiner Lösung zum Laufen bringen. Meine Web-API startup.cs sieht so aus. Sie können sehen, wie Sie Ihre Ursprünge und Richtlinien mit der neuen Klasse CorsPolicy konstruieren können. Und das Aktivieren von CORS mit den Methoden AddCors und UseCors.

public void ConfigureServices(IServiceCollection services) 
{ 
    services.AddMvc(); 
    //Add Cors support to the service 
    services.AddCors(); 

    var policy = new Microsoft.AspNet.Cors.Core.CorsPolicy(); 

    policy.Headers.Add("*");  
    policy.Methods.Add("*");   
    policy.Origins.Add("*"); 
    policy.SupportsCredentials = true; 

    services.ConfigureCors(x=>x.AddPolicy("mypolicy", policy)); 

} 


public void Configure(IApplicationBuilder app, IHostingEnvironment env) 
{ 
    // Configure the HTTP request pipeline. 

    app.UseStaticFiles(); 
    //Use the new policy globally 
    app.UseCors("mypolicy"); 
    // Add MVC to the request pipeline. 
    app.UseMvc(); 
} 

Sie können auch die Politik in den Controllern mit den neuen Attributen Referenz wie so

[EnableCors("mypolicy")] 
[Route("api/[controller]")] 
+1

Nur eine Anmerkung, ich musste 'Microsoft.AspNet.Cors' hinzufügen mein project.json, damit dies funktioniert, genauer gesagt, die Zeile "app.UseCors (" mypolicy ");" meldete einen Fehler, bis das Paket hinzugefügt wurde. In meinem Fall habe ich die Version '1.0.0-beta6' verwendet (anstelle der finalen' 5.2.3' Version auch verfügbar). Außerdem ist es wichtig, '' Microsoft.AspNet.Builder; 'zu' Startup.cs' hinzuzufügen, wenn es nicht bereits vorhanden ist. – Gertsen

+0

Bitte schauen Sie hier nach vNext und MVC6: https://neelbhhatt40.wordpress.com/2015/09/10/what-is-cors-and-how-to-enable-it-in-asp-net-5vnext/ – Neel

+0

Nur eine Anmerkung für Leute ... es funktionierte nicht für mich, bis ich realisierte, dass ich die UseCors vor die UseMvc-Linie stellen musste. – Michael

3

Unterstützung für CORS ist derzeit in der Entwicklung. Nach Ausgabe verfolgt, dass: https://github.com/aspnet/Mvc/issues/498

Update (2015.03.28):
Diese Funktion überprüft wurde und soll in der nächsten Version zur Verfügung steht.

+0

Bitte schauen Sie hier für vNext und MVC6: https: // neelbhhatt40.wordpress .com/2015/09/10/what-is-cors-und-wie-aktivieren-es-in-asp-net-5vnext/ – Neel

18

Ich habe es funktioniert mit dem folgenden Code:

public void ConfigureServices(IServiceCollection services) 
{ 
    services.AddMvc(); 
    services.AddCors(options => options.AddPolicy("AllowAll", p => p.AllowAnyOrigin())); 
} 

Sie können Kette AllowAnyHeader() und/oder AllowAnyMethod() bei Bedarf zur Konfigurationsaktion.

Um es für die komplette App zu konfigurieren:

public void Configure(IApplicationBuilder app) 
{ 
    app.UseCors("AllowAll"); 
} 

Oder einfach nur für einen Controller:

[EnableCors("AllowAll")] 
public class HomeController : Controller 
{ 
    // ... 
} 

-

Update: Konfiguration CORS für alle Anfragen können etwas einfacher gemacht werden:

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

public void Configure(IApplicationBuilder app) 
{ 
    app.UseCors(builder => 
    { 
     builder.WithOrigins("http://some.origin.com") 
       .WithMethods("GET", "POST") 
       .AllowAnyHeader(); 
    }); 
} 

Weitere Informationen finden Sie unter docs.

2

cs1929 die Methode services.ConfigureCors (...) existiert nicht mehr. Es ist zu AddCors kombiniert:

services.AddCors(options => 
    options.AddPolicy("AllowAllOrigins", builder => builder.AllowAnyOrigin())); 
8

In den jüngsten RC2 von ASP.NET-Core.

Die NuGet Pakete sind

"Microsoft.AspNetCore.Owin": "1.0.0-rc2-final", 
"Microsoft.AspNetCore.Cors": "1.0.0-rc2-final", 

In Startup.cs

public void ConfigureServices(IServiceCollection services) 
{ 
    // Add framework services. 
    services.AddCors(); 
    services.AddMvc(); 
} 

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

    app.UseCors(builder => builder 
    .AllowAnyOrigin()); 
    app.UseMvc(); 
} 
+7

Wenn ein Browser eine Pre-Flight-Anfrage verwendet (https://docs.asp.net/en/latest/security/cors.html#preflight-requests), müssen Sie auch erlaubte Header und Methoden einstellen: 'app.UseCors (_ => _.AllowAnyOrigin(). AllowAnyHeader(). AllowAnyMethod()) ' –

1

Install: Microsoft.AspNetCore.Cors

In Configure-Methode:

 app.UseCors(builder => 
       builder.WithOrigins("http://some.origin.com")); 
Verwandte Themen