web-dev-qa-db-fra.com

Comment activer CORS dans ASP.NET Core

J'essaie d'activer le partage de ressources inter-origines sur mon API Web ASP.NET Core, mais je suis bloqué. 

L'attribut EnableCors accepte policyName de type string en tant que paramètre: 

// Summary:
//     Creates a new instance of the Microsoft.AspNetCore.Cors.Core.EnableCorsAttribute.
//
// Parameters:
//   policyName:
//     The name of the policy to be applied.
public EnableCorsAttribute(string policyName);

Que signifie policyName et comment puis-je configurerCORSsur une API Web ASP.NET Core?

110
Oluwafemi

Vous devez configurer une stratégie CORS au démarrage de l'application avec la méthode ConfigureServices:

public void ConfigureServices(IServiceCollection services)
{
    services.AddCors(o => o.AddPolicy("MyPolicy", builder =>
    {
        builder.AllowAnyOrigin()
               .AllowAnyMethod()
               .AllowAnyHeader();
    }));

    // ...
}

La CorsPolicyBuilder dans builder vous permet de configurer la stratégie en fonction de vos besoins. Vous pouvez maintenant utiliser ce nom pour appliquer la stratégie aux contrôleurs et aux actions:

[EnableCors("MyPolicy")]

Ou l'appliquer à chaque demande:

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

    // ...
}
185
Henk Mollema

Ceci est pour .Net-Core 1.1

Malheureusement, les documents sont très déroutants dans ce cas particulier. Donc, je vais le rendre simple:

  • Ajouter le package Microsoft.AspNetCore.Cors nuget à votre projet
  • Dans la méthode ConfigureServices, ajoutez services.AddCors();
  • Dans la méthode Configure, avant d'appeler app.UseMvc() et app.UseStaticFiles(), ajoutez:

    app.UseCors(builder => builder
        .AllowAnyOrigin()
        .AllowAnyMethod()
        .AllowAnyHeader()
        .AllowCredentials());
    

C'est tout. Chaque client a accès à votre API/site Web principal ASP.NET.

Pour .Net-Core 2.0

  • Ajouter le package Microsoft.AspNetCore.Cors nuget à votre projet
  • dans la méthode ConfigureServices, avant d'appeler services.AddMvc(), ajoutez:

     services.AddCors(options =>
        {
            options.AddPolicy("AllowAll",
                builder =>
                {
                    builder
                    .AllowAnyOrigin() 
                    .AllowAnyMethod()
                    .AllowAnyHeader()
                    .AllowCredentials();
                });
        });
    
  • Dans la méthode Configure, avant d'appeler app.UseMvc(), ajoutez app.UseCors("AllowAll");

    AllowAll est le nom de la stratégie que nous devons mentionner dans app.UserCors. Ce pourrait être n'importe quel nom.

73
Vahid Amiri

Sur la base de Réponse de Henk J'ai pu définir le domaine spécifique, la méthode que je souhaite autoriser ainsi que l'en-tête que je souhaite activer pour CORS:

public void ConfigureServices(IServiceCollection services)
{
    services.AddCors(options =>
         options.AddPolicy("AllowSpecific", p => p.WithOrigins("http://localhost:1233")
                                                   .WithMethods("GET")
                                                   .WithHeaders("name")));
    services.AddMvc();
}

usage:

[EnableCors("AllowSpecific")]
31
Oluwafemi

Vous devez configurer dans la classe Startup.cs ` 

services.AddCors(options =>
        {
            options.AddPolicy("CorsPolicy",
                builder => builder.AllowAnyOrigin()
                .AllowAnyMethod()
                .AllowAnyHeader()
                .AllowCredentials());
        });`
3
Sunil Dhappadhule

Spécifiquement dans dotnet core 2.2 avec SignalR vous devez changer

.WithOrigins("http://localhost:3000") ou

.SetIsOriginAllowed(isOriginAllowed: _ => true) //for all origins

à la place de .AllowAnyOrigin() avec .AllowCredentials()

https://trailheadtechnology.com/breaking-change-in-aspnetcore-2-2-for-signalr-and-cors/

https://github.com/aspnet/AspNetCore/issues/4483

2
PJ3

`

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddCors(options =>
        {
            options.AddPolicy("AllowAnyOrigin",
                builder => builder
                .AllowAnyOrigin()
                .AllowAnyMethod()
                .AllowAnyHeader());
        });

        services.Configure<MvcOptions>(options => {
            options.Filters.Add(new CorsAuthorizationFilterFactory("AllowAnyOrigin"));
        });            
    }

`

2
Nathan Alard

Si vous hébergez sur IIS, l'une des raisons possibles est que vous obtenez cela parce que IIS bloque le verbe OPTIONS. J'ai passé presque une heure à cause de cela:

Une indication révélatrice est que vous obtenez une erreur 404 lors de la demande OPTIONS.

Pour résoudre ce problème, vous devez explicitement indiquer à IIS not de bloquer la demande OPTIONS.

Aller au filtrage des demandes:

 IIS Request Filtering

Assurez-vous que les options sont autorisées:

 Make sure OPTIONS is True

Ou, créez simplement un web.config avec le paramètre suivant:

<system.webServer>
    <security>
        <requestFiltering>
            <verbs>
                <remove verb="OPTIONS" />
                <add verb="OPTIONS" allowed="true" />
            </verbs>
        </requestFiltering>
    </security>
</system.webServer>
1
Rosdi Kasim