Обложка канала

.NET Разработчик

Опытный разработчик не так давно зашёл в .Net и поставил цель получить сертификат Microsoft. Свой ежедневный прогресс он описывает на канале .Net Разработчик. Заметки об изученном материале, советы по повышению производительности и поддержке мотивации, ин

.NET Разработчик

3 года назад
Открыть в
День 1549. #ЗаметкиНаПолях Используем Группы Конечных Точек для Версионирования Минимальных API В ASP.NET Core 7 значительно улучшены минимальные API, в частности добавлена функция групп конечных точек. Это способ объявить некоторую общую информацию о маршрутизации для нескольких конечных точек, а также добавить общие ограничения, такие как авторизация, правила CORS и т. д. Группы конечных точек позволяют управлять версиями API. Просто добавляем базовый маршрут в метод MapGroup, например: MapGroup("/v1") или MapGroup("/v2"). ASP.NET Core 7 предоставляет класс RouteGroupBuilder для создания правил и группировки конечных точек. Создадим две группы конечных точек:
public static class MyGroups
{
  public static RouteGroupBuilder 
   Group1(this RouteGroupBuilder g)
  {
    g.MapGet("/", () => 
     Results.Ok(new List<int> { 1, 2, 3 }));
    g.MapGet("/{id}", (int id) => 
     Results.Ok(id));

    return g;
  }

  public static RouteGroupBuilder 
   Group2(this RouteGroupBuilder g)
  {
    g.MapGet("/", () => 
     Results.Ok(new List<int> { 4, 5, 6 }));
    g.MapGet("/{id}", (int id) => 
     Results.Ok(id + 1));

    return g;
  }
}

Для удобства мы сгруппировали конечные точки в отдельных методах расширения. Теперь добавим ограничения и базовый маршрут к каждой группе в основном файле Program.cs. Кроме того, для демонстрации различий добавим Swagger, установив NuGet пакет Microsoft.AspNetCore.OpenApi и добавив необходимые методы расширения:
var builder = WebApplication.CreateBuilder(args);

builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

app.UseSwagger();
app.UseSwaggerUI();

// Demo group endpoints
app.MapGroup("/v1")
    .Group1()
    .RequireCors("CorsPolicy1")
    .AllowAnonymous()
    .WithTags("v1");

app.MapGroup("/v2")
    .Group2()
    .RequireCors("CorsPolicy2")
    .RequireAuthorization()
    .RequireRateLimiting("LimitPolicy")
    .WithTags("v2");

app.Run();

Как видите, к первой группе применена одна политика CORS, а ко второй группе — другая, а также правила авторизации и ограничения скорости https://t.me/NetDeveloperDiary/1487. Также для удобства отображения в SwaggerUI каждой группе добавлены теги с помощью метода WithTags(…). Результат на картинке ниже. Источник: https://anthonygiretti.com/2023/03/16/asp-net-core7-use-endpoint-groups-to-manage-minimal-apis-versioning/