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.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow