TGViewer
.NET Разработчик .NET Разработчик @netdeveloperdiary · 6.75K subscribers
Post #2441 2.44K
День 2017. #ЗаметкиНаПолях
Организуем Параметры Минимальных API
Несмотря на то, что эта функциональность была добавлена в .NET 7, я не писал о ней подробно, только пару слов про превью. Сегодня расскажу, что это.

Рассмотрим следующий минимальный API:
app.MapGet("ToDos", async (
ToDoDbContext dbContext,
string? tenantId,
int offset,
int limit,
ILogger<Program> logger) =>
{
logger.LogInformation(…);

var todos = await dbContext.ToDos
.Where(x => x.TenantId == tenantId)
.OrderBy(x => x.Id)
.Skip(offset)
.Take(limit)
.ToListAsync();

return TypedResults.Ok(todos);
});

У нас несколько разнородных параметров, разбросанных по сигнатуре метода. В простом примере это не страшно, но может быстро перерасти в беспорядок. Мы можем использовать атрибут AsParameters, чтобы сгруппировать их вместе:
app.MapGet("ToDos/WithRequest", async ([AsParameters] GetRequest request) =>
{
…
});

record struct GetRequest(
ToDoDbContext DbContext,
int Offset,
int Limit,
[FromHeader(Name = "X-TenantId")]
string? TenantId,
ILogger<GetRequest> Logger);

Здесь используется структура-запись (см. п.5 здесь), но классы также поддерживаются. Рекомендуется использовать структуру-запись, чтобы избежать дополнительного выделения памяти.

Кроме того, мы можем применять любые атрибуты привязки (FromHeader, FromQuery, FromServices и т. д.). В примере выше значение тенанта будет браться из заголовка запроса.

Источники:
-
https://steven-giesel.com/blogPost/ee26a396-8f5a-40a7-9dd5-f08cd8c03518/organizing-parameters-in-minimal-api-with-the-asparametersattribute
-
https://jaliyaudagedara.blogspot.com/2022/07/net-7-preview-5-using-asparameters.html
  • 👍 17
More from @netdeveloperdiary
  1. Oct 7, 2026День 2807. #ЗаметкиНаПолях Типы Коллекций в .NET, Которые Стоит Попробовать. Окончание Нач…
  2. Oct 6, 2026🦈 Открытое собеседование на Middle C# | 6 октября, 19:00 МСК Приглашаем на открытое собес…
  3. Oct 6, 2026День 2806. #ЗаметкиНаПолях Типы Коллекций в .NET, Которые Стоит Попробовать. Начало Больши…
  4. Oct 5, 2026День 2805. #ЧтоНовенького #NET11 Аргументы в Выражениях Коллекций в C#15 В C#15 реализован…
  5. Oct 4, 2026День 2804. #ВопросыНаСобеседовании Марк Прайс предложил свой набор из 60 вопросов (как тех…
  6. Oct 3, 2026Post #3360
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →