Ricerca…


Osservazioni

La sicurezza del browser impedisce a una pagina web di inoltrare richieste AJAX a un altro dominio. Questa restrizione è denominata criterio di origine identica e impedisce a un sito dannoso di leggere i dati riservati da un altro sito. Tuttavia, a volte potresti voler consentire ad altri siti di effettuare richieste di origine incrociata alla tua app web.

Cross Origin Resource Sharing (CORS) è uno standard W3C che consente a un server di attenuare la politica dell'origine stessa. Utilizzando CORS, un server può consentire esplicitamente alcune richieste di origine incrociata mentre respinge le altre. CORS è più sicuro e più flessibile rispetto alle tecniche precedenti come JSONP.

Abilita CORS per tutte le richieste

Utilizzare il metodo di estensione UseCors() su IApplicationBuilder nel metodo Configure per applicare la politica CORS a tutte le richieste.

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

Abilita la politica CORS per controller specifici

Per abilitare una determinata politica CORS per controller specifici, è necessario creare la politica nell'estensione AddCors all'interno del metodo ConfigureServices :

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

Ciò consente di applicare la politica a un controller:

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

Politiche CORS più sofisticate

Il builder di criteri consente di creare policy sofisticate.

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

Questo criterio consente solo le origini http://localhost:5000 e http://myproductionapp.com con solo i metodi GET , POST e HEAD e accetta solo le intestazioni HTTP di content-type accept , content-type e di origin . Il metodo SetPreflightMaxAge fa in modo che i browser memorizzino nella cache il risultato della richiesta di preflight ( OPTIONS ) da memorizzare nella cache per il periodo di tempo specificato.

Abilita la politica CORS per tutti i controller

Per abilitare un criterio CORS su tutti i controller MVC, è necessario creare il criterio nell'estensione AddCors all'interno del metodo ConfigureServices e quindi impostare il criterio su 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");
}

Questo criterio CORS può essere sovrascritto su un controller o su una base azione, ma può impostare l'impostazione predefinita per l'intera applicazione.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow