CORS и кросс-доменные запросы в ASP.NET Core. Политики CORS, глобальная и локальная настройка CORS

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

Подписаться
Уведомить о
guest
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии