2015-03-17 15 views
32

Chciałbym włączyć CORS na API zbudowany z ASP.NET Core MVC, ale wszystkie bieżące dokumenty odnoszą się do wcześniejszych wersji tej struktury .Jak włączyć żądania krzyżowe (CORS) w ASP.NET Core MVC

+0

Jak chodzi? http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api – lcryder

+0

Dokumentacja w "nowych" dokumentach tutaj: http: //docs.asp. net/pl/latest/security/cors.html i http://mvc.readthedocs.org/en/latest/security/cors-policy.html – Daniel

+0

Proszę zajrzeć tutaj: https: //neelbhatt40.wordpress. com/2015/09/10/what-is-cors-and-how-to-enable-it-in-asp-net-5vnext/ – Neel

Odpowiedz

28

Notatki na temat nowych funkcji Corsa są bardzo lekkie, ale udało mi się sprawić, by działało w moim rozwiązaniu, patrząc na nowe klasy i metody. Mój Web API startup.cs wygląda tak. Możesz zobaczyć, jak możesz skonstruować swoje pochodzenie i zasady, używając nowej klasy CorsPolicy. I włączanie CORS metodami AddCors i 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(); 
} 

Można również odwołać się do polityki w kontrolerach z nowymi atrybutami jak tak

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

Po prostu notka, musiałem dodać 'Microsoft.AspNet.Cors' do mój project.json, aby to działało, a dokładniej 'app.UseCors (" mypolicy ");' linia zgłosiła błąd do momentu dodania tego pakietu. W moim przypadku użyłem wersji '1.0.0-beta6' (dostępna jest również wersja ostateczna' 5.2.3'). Ponadto ważne jest, aby dodać 'using Microsoft.AspNet.Builder;' do 'Startup.cs', jeśli jeszcze go tam nie ma. – Gertsen

+0

Proszę spojrzeć tutaj dla vNext i MVC6: https://neelbhatt40.wordpress.com/2015/09/10/what-is-cors-and-how-to-enable-it-in-asp-net-5vnext/ – Neel

+0

Po prostu wiadomość dla ludzi ... to nie działało dla mnie, dopóki nie zorientowałem się, że muszę umieścić UseCors przed linią UseMvc. – Michael

3

Wsparcie dla CORS jest obecnie w fazie rozwoju. Następujący problem śledzenia że: https://github.com/aspnet/Mvc/issues/498

Update (28.03.2015):
Funkcja ta została sprawdzona i powinny być dostępne w następnym wydaniu.

+0

Proszę spojrzeć tutaj dla vNext i MVC6: https: //neelbhatt40.wordpress .com/2015/09/10/what-is-cors-and-how-to-enable-it-in-asp-net-5vnext/ – Neel

18

mam to działa stosując następujący kod:

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

Można łańcuch AllowAnyHeader() i/lub AllowAnyMethod() do działania konfiguracyjnego, jeśli to konieczne.

Aby skonfigurować go do pełnej aplikacji:

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

Lub po prostu dla kontrolera:

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

-

Aktualizacja: konfigurowanie Cors dla wszystkich wniosków może zrobić nieco łatwiej:

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

Aby uzyskać więcej informacji, zapoznaj się z docs.

2

cs1929 metoda services.ConfigureCors (...) już nie istnieje. Jest on łączony z AddCors:

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

W najnowszym RC2 ASP.NET Core.

pakiety

Nuget są

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

W 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

Jeśli przeglądarka korzysta z żądania przed lotem (https://docs.asp.net/en/latest/security/cors.html#preflight-requests), musisz także ustawić dozwolone nagłówki i metody: 'app.UseCors (_ => _.AllowAnyOrigin(). AllowAnyHeader(). AllowAnyMethod()) ' –

1

Instalacja: Microsoft.AspNetCore.Cors

w metodzie Konfiguracja:

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