Recherche…


Remarques

La sécurité du navigateur empêche une page Web de faire des requêtes AJAX vers un autre domaine. Cette restriction s'appelle la politique de même origine et empêche un site malveillant de lire des données sensibles d'un autre site. Cependant, il peut arriver que vous souhaitiez laisser d’autres sites créer des requêtes d’origine croisée vers votre application Web.

Cross Origin Resource Sharing (CORS) est un standard W3C qui permet à un serveur d'assouplir la politique de même origine. En utilisant CORS, un serveur peut autoriser explicitement certaines requêtes d’origine croisée tout en en rejetant d’autres. CORS est plus sûr et plus flexible que les techniques antérieures telles que JSONP.

Activer CORS pour toutes les demandes

Utilisez la méthode d'extension UseCors() sur IApplicationBuilder dans la méthode Configure pour appliquer la stratégie CORS à toutes les demandes.

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

public void Configure(IApplicationBuilder app)
{
    // Other middleware..

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

    // Other middleware..

    app.UseMvc();
}

Activer la stratégie CORS pour des contrôleurs spécifiques

Pour activer une stratégie CORS pour des contrôleurs spécifiques, vous devez créer la stratégie dans l'extension AddCors dans la méthode ConfigureServices :

services.AddCors(cors => cors.AddPolicy("AllowAll", policy =>
{
    policy.AllowAnyOrigin()
            .AllowAnyMethod()
            .AllowAnyHeader();
}));

Cela vous permet d'appliquer la stratégie à un contrôleur:

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

Des politiques CORS plus sophistiquées

Le générateur de règles vous permet de créer des stratégies sophistiquées.

app.UseCors(builder =>
{
    builder.WithOrigins("http://localhost:5000", "http://myproductionapp.com")
           .WithMethods("GET", "POST", "HEAD")
           .WithHeaders("accept", "content-type", "origin")
           .SetPreflightMaxAge(TimeSpan.FromDays(7));
});

Cette stratégie n'autorise que les origines http://localhost:5000 et http://myproductionapp.com avec uniquement les méthodes GET , POST et HEAD et accepte uniquement les content-type têtes HTTP accept , content-type et origin . La méthode SetPreflightMaxAge oblige les navigateurs à mettre en cache le résultat de la demande de contrôle en amont ( OPTIONS ) à mettre en cache pour la durée spécifiée.

Activer la stratégie CORS pour tous les contrôleurs

Pour activer une stratégie CORS sur tous vos contrôleurs MVC, vous devez créer la stratégie dans l'extension AddCors dans la méthode ConfigureServices, puis définir la stratégie sur CorsAuthorizationFilterFactory

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Cors.Internal;
...
public void ConfigureServices(IServiceCollection services) {
    // Add AllowAll policy just like in single controller example.
    services.AddCors(options => {
        options.AddPolicy("AllowAll",
           builder => {
                builder.AllowAnyOrigin()
                       .AllowAnyMethod()
                       .AllowAnyHeader();
        });
    });

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

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

public void Configure(IApplicationBuilder app) {
    app.useMvc();
    // For content not managed within MVC. You may want to set the Cors middleware
    // to use the same policy.
    app.UseCors("AllowAll");
}

Cette stratégie CORS peut être remplacée sur une base de contrôleur ou d'action, mais cela peut définir la valeur par défaut pour toute l'application.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow