Если для обработки запросов в приложении применяются конечные точки, то мы можем для каждой конечной точки указать свои настройки 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.