web-dev-qa-db-fra.com

Comment activer les requêtes cross-origin (CORS) dans ASP.NET Core MVC

Je voudrais activer CORS sur une API construite avec ASP.NET Core MVC, mais tous les documents actuels font référence à des versions antérieures de ce cadre.

33
James White

Les notes sur les nouvelles fonctionnalités de Cors sont très légères, mais j'ai pu le faire fonctionner dans ma solution en regardant les nouvelles classes et méthodes. Mon API Web startup.cs ressemble à ceci. Vous pouvez voir comment vous pouvez construire vos origines et vos politiques en utilisant la nouvelle classe CorsPolicy. Et activer CORS avec les méthodes AddCors et 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();
 }

Vous pouvez également référencer la stratégie dans les contrôleurs avec les nouveaux attributs comme ceci

[EnableCors("mypolicy")]
[Route("api/[controller]")]  
29
alistair

Je l'ai fait fonctionner en utilisant le code suivant:

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

Vous pouvez chaîner AllowAnyHeader() et/ou AllowAnyMethod() à l'action de configuration si nécessaire.

Pour le configurer pour l'application complète:

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

Ou tout simplement pour un contrôleur:

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

-

Mise à jour: la configuration de CORS pour tous les demandes peuvent être faites un peu plus facilement:

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

Pour plus d'informations, reportez-vous à docs .

19
Henk Mollema

Dans le dernier RC2 d'ASP.NET Core.

Les packages NuGet sont

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

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

cs1929 la méthode services.ConfigureCors (...) n'existe plus. Il est combiné à AddCors:

services.AddCors(options => 
    options.AddPolicy("AllowAllOrigins", builder => builder.AllowAnyOrigin()));
3
Otabek Kholikov

Le support de CORS est en cours de développement. Le problème suivant suit ce qui suit: https://github.com/aspnet/Mvc/issues/498

Mise à jour (28/03/2015) :
Cette fonctionnalité a été archivée et devrait être disponible dans la prochaine version.

3
Kiran Challa

Installer: Microsoft.AspNetCore.Cors

Dans la méthode Configure:

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