Minimal APIs стали популярним інструментом для швидкої розробки веб-додатків в середовищі .NET. Вони пропонують простий та ефективний спосіб створення API без зайвого навантаження. Однак, при використанні Minimal APIs разом з MediatR користувачі можуть стикнутися з проблемою незавантаження вкладених об’єктів з рядка запиту, що виникає через неправильне розуміння роботи маршрутизації та серіалізації в Minimal APIs.
Проблема полягає в тому, що при передачі вкладених об’єктів через рядок запиту, деякі властивості не заповнюються на боці сервера, навіть якщо вони присутні в рядку запиту. Наприклад, розглянемо наступний рядок запиту:
1 |
/api/Relogio?Name=&ProductRef.Code=asdsadsadsadsadasdsasadsa&ProductRef.Year=12&CurrentPage=1&PageSize=15 |
У цьому рядку запиту ми передаємо параметри для об’єкта GetAllProductsRequest, який містить вкладений об’єкт ProductRef з властивостями Code і Year. Проте, при розборі цього рядка запиту на сервері, властивості ProductRef.Code і ProductRef.Year не заповнюються, хоча прості властивості, такі як Name, заповнюються коректно.
Для початку, розглянемо клас запиту GetAllProductsRequest:
1 2 3 4 5 6 7 |
public class GetAllProductsRequest : IRequest<PaginatedList<GetProductResponse>> { public string? Name { get; set; } public ProductRef? ProductRef { get; set; } // Цей об'єкт не завантажується public int CurrentPage { get; set; } = 1; public int PageSize { get; set; } = 15; } |
Тут властивість ProductRef представляє вкладений об’єкт, який також містить властивості Code і Year:
1 2 3 4 5 |
public class ProductRef { public string Code { get; set; } = string.Empty; public int? Year { get; set; } } |
При аналізі рядка запиту на сервері властивості ProductRef не заповнюються, навіть якщо вони присутні в рядку запиту. Це може бути спричинено неправильним розумінням роботи роутінгу та параметрів у Minimal APIs.
Використання атрибуту AsParameters у маршруті Minimal API дозволяє автоматично зв’язувати параметри запиту з властивостями об’єкта запиту. Проте, цей механізм не завжди коректно працює з вкладеними об’єктами, що може призводити до проблем із незавантаженням деяких властивостей.
Іншим фактором, який може впливати на проблему, є версія .NET, яка використовується. У даному випадку використовується .NET 8.0.2 x64. Варто перевірити, чи дана версія має відомі проблеми з обробкою вкладених об’єктів через рядок запиту в Minimal APIs.
Для вирішення проблеми незавантаження вкладених об’єктів з рядка запиту в Minimal APIs можна спробувати наступні підходи: