Zoeken…


Opmerkingen

Browserbeveiliging voorkomt dat een webpagina AJAX-aanvragen doet naar een ander domein. Deze beperking wordt het beleid van dezelfde oorsprong genoemd en voorkomt dat een kwaadwillende site gevoelige gegevens van een andere site leest. Soms wilt u echter andere sites verzoeken van oorsprong laten maken naar uw web-app.

Cross Origin Resource Sharing (CORS) is een W3C-standaard waarmee een server het beleid van dezelfde oorsprong kan versoepelen. Met behulp van CORS kan een server sommige aanvragen van oorsprong toestaan, terwijl andere wordt afgewezen. CORS is veiliger en flexibeler dan eerdere technieken zoals JSONP.

Schakel CORS in voor alle verzoeken

Gebruik de uitbreidingsmethode UseCors() op de IApplicationBuilder in de methode Configure om het CORS-beleid op alle aanvragen toe te passen.

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

Schakel CORS-beleid in voor specifieke controllers

Om een bepaald CORS-beleid voor specifieke controllers in te schakelen, moet u het beleid bouwen in de AddCors extensie binnen de methode ConfigureServices :

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

Hiermee kunt u het beleid toepassen op een controller:

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

Meer geavanceerd CORS-beleid

Met de beleidsbouwer kunt u een geavanceerd beleid opstellen.

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

Dit beleid staat alleen de oorsprong http://localhost:5000 en http://myproductionapp.com met alleen de methoden GET , POST en HEAD en accepteert alleen de HTTP-headers accept , content-type en origin . De methode SetPreflightMaxAge zorgt ervoor dat de browsers het resultaat van het preflight-verzoek ( OPTIONS ) in de cache opslaan gedurende de opgegeven tijd.

Schakel CORS-beleid in voor alle controllers

Om een CORS-beleid voor al uw MVC-controllers in te schakelen, moet u het beleid bouwen in de AddCors-extensie binnen de ConfigureServices-methode en vervolgens het beleid instellen op de 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");
}

Dit CORS-beleid kan op controller- of actiebasis worden overschreven, maar dit kan de standaardinstelling voor de hele toepassing zijn.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow