Глобальная и локальная настройка CORS

Последнее обновление: 08.05.2022

Если для обработки запросов в приложении применяются конечные точки, то мы можем для каждой конечной точки указать свои настройки CORS. Таким образом, мы можем установить глобально для всех ресурсов одни и те же настройки CORS, либо конкретизировать для каждого ресурса свои настройки.

В прошлых темах использовалась глобальная настройка CORS, которая предполагает, что настройки CORS передаются в метод app.UseCors():

var builder = WebApplication.CreateBuilder();

builder.Services.AddCors(); // добавляем сервисы CORS

var app = builder.Build();

// глобальная настройка CORS для всех ресурсов
app.UseCors(builder => builder.AllowAnyOrigin());

app.MapGet("/", async context => await context.Response.WriteAsync("Hello World!"));
app.MapGet("/home", async context => await context.Response.WriteAsync("Home Page!"));

app.Run();

Здесь вне зависимости, обращаемся ли мы к ресурсу "/" или к ресурсу "/home", к обоим ресурсам могут обращаться пользователи с любых адресов.

С помощью метода RequireCors() у объекта IEndpointConventionBuuilder мы можем установить настройки CORS для каждого конкретного маршрута. Данный метод в качестве параметра принимает либо название политики CORS, либо делегат с параметром CorsPolicyBuilder, с помощью который устанавливается конфигурацию CORS.

var builder = WebApplication.CreateBuilder();

builder.Services.AddCors(options => {

    options.AddPolicy("AllowTestSite", builder => builder
        .WithOrigins("https://localhost:7027")
        .AllowAnyHeader()
        .AllowAnyMethod());

    options.AddPolicy("AllowNormSite", builder => builder
            .WithOrigins("https://localhost.com")
            .AllowAnyHeader()
            .AllowAnyMethod());
});

var app = builder.Build();

app.UseCors();

app.MapGet("/", async context => await context.Response.WriteAsync("Hello World!"))
    .RequireCors(options => options.AllowAnyOrigin());

app.MapGet("/home", async context => await context.Response.WriteAsync("Home Page!"))
    .RequireCors("AllowNormSite");

app.MapGet("/about", async context => await context.Response.WriteAsync("About Page!"))
    .RequireCors("AllowTestSite");

app.Run();

Таким образом, мы можем определить для каждого ресурса в приложении свою конфигурацию CORS.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850