asp.net-core
Cross-Origin Requests (CORS)
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()
på 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.