Sök…


Anmärkningar

Webbläsarsäkerhet förhindrar att en webbsida gör AJAX-förfrågningar till en annan domän. Denna begränsning kallas för samma ursprungspolicy och förhindrar en skadlig webbplats från att läsa känslig information från en annan webbplats. Men ibland kanske du vill låta andra webbplatser göra begäranden om ursprung till din webbapp.

Cross Origin Resource Sharing (CORS) är en W3C-standard som gör att en server kan koppla av samma ursprungspolicy. Med hjälp av CORS kan en server uttryckligen tillåta vissa begäranden över ursprung medan de avvisar andra. CORS är säkrare och mer flexibel än tidigare tekniker som JSONP.

Aktivera CORS för alla förfrågningar

Använd UseCors()IApplicationBuilder i metoden Configure för att tillämpa CORS-policyn på alla förfrågningar.

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

Aktivera CORS-policy för specifika kontroller

För att aktivera en viss CORS-policy för specifika kontroller måste du bygga policyn i AddCors i metoden ConfigureServices :

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

Detta gör att du kan tillämpa policyn på en controller:

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

Mer sofistikerade CORS-policyer

Med policybyggaren kan du bygga sofistikerade policyer.

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

Denna policy tillåter endast ursprung http://localhost:5000 och http://myproductionapp.com med endast GET , POST och HEAD metoderna och accepterar endast HTTP-rubrikerna för accept , content-type och origin . Metoden SetPreflightMaxAge gör att webbläsarna cachar resultatet av preflight-begäran ( OPTIONS ) för att cache under den angivna tidsperioden.

Aktivera CORS-policy för alla kontrollerare

För att aktivera en CORS-policy på alla dina MVC-kontroller måste du bygga policyn i tillägget AddCors i metoden ConfigureServices och sedan ställa in policyn på 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");
}

Denna CORS-policy kan skrivas över på en controller eller åtgärdsbasis, men det kan ställa in standard för hela applikationen.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow