asp.net-core
Ursprungsübergreifende Anfragen (CORS)
Suche…
Bemerkungen
Die Browsersicherheit verhindert, dass eine Webseite AJAX-Anforderungen an eine andere Domäne sendet. Diese Einschränkung wird als Richtlinie mit demselben Ursprung bezeichnet und verhindert, dass eine schädliche Website vertrauliche Daten von einer anderen Website liest. Manchmal möchten Sie jedoch, dass andere Websites Ursprungsanforderungen an Ihre Webanwendung stellen.
Cross Origin Resource Sharing (CORS) ist ein W3C-Standard, mit dem ein Server die Richtlinie mit demselben Ursprung lockern kann. Bei Verwendung von CORS kann ein Server bestimmte Ursprungsanforderungen explizit zulassen, andere dagegen ablehnen. CORS ist sicherer und flexibler als frühere Techniken wie JSONP.
Aktivieren Sie CORS für alle Anforderungen
Verwenden Sie die Erweiterungsmethode UseCors()
für IApplicationBuilder
in der Methode Configure
, um die CORS-Richtlinie auf alle Anforderungen anzuwenden.
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();
}
Aktivieren Sie die CORS-Richtlinie für bestimmte Controller
Um eine bestimmte CORS-Richtlinie für bestimmte Controller zu aktivieren, müssen Sie die Richtlinie in der AddCors
Erweiterung innerhalb der ConfigureServices
Methode AddCors
:
services.AddCors(cors => cors.AddPolicy("AllowAll", policy =>
{
policy.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader();
}));
Auf diese Weise können Sie die Richtlinie auf einen Controller anwenden:
[EnableCors("AllowAll")]
public class HomeController : Controller
{
// ...
}
Anspruchsvollere CORS-Richtlinien
Mit dem Policy Builder können Sie ausgefeilte Richtlinien erstellen.
app.UseCors(builder =>
{
builder.WithOrigins("http://localhost:5000", "http://myproductionapp.com")
.WithMethods("GET", "POST", "HEAD")
.WithHeaders("accept", "content-type", "origin")
.SetPreflightMaxAge(TimeSpan.FromDays(7));
});
Diese Richtlinie erlaubt nur die Ursprünge http://localhost:5000
und http://myproductionapp.com
nur mit den Methoden GET
, POST
und HEAD
und akzeptiert nur die HTTP-Header accept
, content-type
und origin
. Die SetPreflightMaxAge
Methode bewirkt, dass die Browser das Ergebnis der Preflight-Anforderung ( OPTIONS
) für die angegebene Zeit zwischenspeichern.
Aktivieren Sie die CORS-Richtlinie für alle Controller
Um eine CORS-Richtlinie für alle MVC-Controller zu aktivieren, müssen Sie die Richtlinie in der AddCors-Erweiterung innerhalb der ConfigureServices-Methode erstellen und dann die Richtlinie für die 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");
}
Diese CORS-Richtlinie kann auf Controller- oder Aktionsbasis überschrieben werden. Dies kann jedoch den Standard für die gesamte Anwendung festlegen.