Политики содержат набор правил для конфигурирования CORS в вашем приложении ASP.NET Core. Политики CORS позволяют в дальнейшем упростить настройку вашего приложения и, при необходимости, задействовать различные наборы правил для различных сред окружения.
Создание политики CORS в ASP.NET Core
Чтобы создать политику CORS в метод AddCors() передается делегат, который принимает объект типа CorsOptions. У этого объекта вызывается метод AddPolicy(), устанавливающий политику:
public void AddPolicy(string name, Action<CorsPolicyBuilder> configurePolicy);
первый параметр метода — произвольное название политики, второй — делегат, использующий объект CorsPolicyBuilder, который был рассмотрен в предыдущей части. Чтобы применить политику CORS, её название передается в метод UseCors(). Создадим политику CORS и используем её в нашем приложении:
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddCors(options=> options.AddPolicy("corsPolicy",
(builder) => {
builder.AllowAnyOrigin()
.AllowAnyHeader()
.AllowAnyMethod();
}));
var app = builder.Build();
app.UseCors("corsPolicy"); //используем политику
app.MapGet("/", () => Results.Ok(new { name = "Tom", age=25, organization = "Microsoft"}));
app.Run();
}
В данном случае, мы определили политику CORS с названием «corsPolicy» и применили её в нашем приложении:
app.UseCors("corsPolicy"); //используем политику
При этом, мы можем создать несколько различных политик и использовать их по мере необходимости, например:
public class Program
{
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddCors(
options =>
{
options.AddPolicy("corsPolicy", builder =>
builder.AllowAnyOrigin()
.AllowAnyHeader()
.AllowAnyMethod());
options.AddPolicy("anotherPolicy", builder =>
builder.WithOrigins("https://localhost:7264")
.AllowAnyHeader());
});
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseCors("corsPolicy");
}
else
{
app.UseCors("anotherPolicy");
}
app.MapGet("/", () => Results.Ok(new { name = "Tom", age=25, organization = "Microsoft"}));
app.Run();
}
}
Локальная настройка CORS
С помощью метода RequireCors() у объекта IEndpointConventionBuilder мы можем установить настройки CORS для каждого маршрута по отдельности, то есть произвести локальную настройку CORS.
В качестве параметра метод RequireCors() принимает или название политики CORS, или делегат с параметром CorsPolicyBuilder, с помощью которого ранее мы устанавливали глобальные настройки CORS. Например:
public class Program
{
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddCors(
options =>
{
options.AddPolicy("corsPolicy", builder =>
builder.AllowAnyOrigin()
.AllowAnyHeader()
.AllowAnyMethod());
options.AddPolicy("anotherPolicy", builder =>
builder.WithOrigins("https://localhost:7264")
.AllowAnyHeader());
});
var app = builder.Build();
app.MapGet("/", () => Results.Ok(new { name = "Tom", age=25, organization = "Microsoft"}))
.RequireCors("corsPolicy");
app.MapGet("/another", () => Results.Ok(new { name = "Иван", age = 15, organization = "Мамкин бизнесмен" }))
.RequireCors("anotherPolicy");
app.Run();
}
}
В данном случае, мы использовали две различные политики CORS и использовали каждую из них для конкретной конечной точки: политику с именем corsPolicy мы применили в первой конечной точке, а политику CORS с именем anotherPolicy — ко второй.
Итого
При необходимости, мы можем создавать политики CORS и использовать их в приложении глобально (использую вызов метод UseCors()) или локально, передав в метод RequireCors() конкретной конечной точки имя политики.