Политики содержат набор правил для конфигурирования 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()
конкретной конечной точки имя политики.