Szukaj…


Uwagi

Zabezpieczenia przeglądarki uniemożliwiają stronie internetowej wysyłanie żądań AJAX do innej domeny. To ograniczenie nazywa się zasadą tego samego pochodzenia i uniemożliwia złośliwemu serwisowi odczytanie poufnych danych z innego serwisu. Czasami jednak możesz chcieć zezwolić innym stronom na przesyłanie żądań dotyczących różnych źródeł do Twojej aplikacji internetowej.

Udostępnianie zasobów między źródłami (CORS) to standard W3C, który umożliwia serwerowi złagodzenie zasad tego samego pochodzenia. Korzystając z CORS, serwer może jawnie zezwalać na niektóre żądania dotyczące różnych źródeł, a inne odrzucać. CORS jest bezpieczniejszy i bardziej elastyczny niż wcześniejsze techniki, takie jak JSONP.

Włącz CORS dla wszystkich żądań

Użyj metody rozszerzenia UseCors() na IApplicationBuilder w metodzie Configure , aby zastosować IApplicationBuilder CORS do wszystkich żądań.

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

Włącz zasady CORS dla określonych kontrolerów

Aby włączyć określoną zasadę CORS dla określonych kontrolerów, musisz zbudować AddCors rozszerzeniu AddCors w ramach metody ConfigureServices :

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

Umożliwia to zastosowanie zasad do kontrolera:

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

Bardziej wyrafinowane zasady CORS

Narzędzie do budowania polityk pozwala budować wyrafinowane polityki.

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

Ta zasada zezwala tylko na początkowe http://localhost:5000 i http://myproductionapp.com tylko z metodami GET , POST i HEAD i akceptuje tylko nagłówki HTTP accept , content-type i origin . Metoda SetPreflightMaxAge powoduje, że przeglądarki buforują wynik żądania kontroli wstępnej ( OPTIONS ), które mają być buforowane przez określony czas.

Włącz zasady CORS dla wszystkich kontrolerów

Aby włączyć zasadę CORS na wszystkich kontrolerach MVC, musisz zbudować zasadę w rozszerzeniu AddCors w ramach metody ConfigureServices, a następnie ustawić CorsAuthorizationFilterFactory na 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");
}

Tę zasadę CORS można zastąpić na podstawie kontrolera lub akcji, ale może to ustawić wartość domyślną dla całej aplikacji.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow