Ответ
Этот процесс называется привязкой модели (Model Binding). Платформа автоматически извлекает данные из различных частей запроса и преобразует их в аргументы метода действия.
Источники данных (в порядке приоритета по умолчанию):
[FromBody]: Тело запроса (для JSON, XML). Используется системой форматирования ввода (Input Formatter), например,System.Text.Json.[FromForm]: Данные формы (application/x-www-form-urlencodedилиmultipart/form-data).[FromRoute]: Значения из шаблона маршрута (например,{id}в[HttpGet("api/products/{id}")]).[FromQuery]: Параметры строки запроса (после?в URL).[FromHeader]: Значения HTTP-заголовков.
Процесс:
- Платформа ищет источник для каждого параметра, используя атрибуты или соглашения (например, сложные объекты по умолчанию берутся из тела).
- Сопоставляет имена свойств (регистронезависимо) с ключами в данных запроса.
- Преобразует строковые значения в целевые типы (
int,DateTime,Guidи т.д.).
Пример с явным указанием источников:
[HttpGet("products/{id}/reviews")] // id берется из маршрута
public IActionResult GetReviews(
int id, // Из маршрута
[FromQuery] int page = 1, // Из query-строки: ?page=2
[FromHeader(Name = "X-Sort-Order")] string sortOrder = "asc") // Из заголовка
{
// ... логика действия
}
[HttpPost]
public IActionResult CreateProduct([FromBody] ProductDto product) // Из тела запроса (JSON)
{
// ...
}
Валидация: После привязки автоматически выполняется валидация модели (если тип помечен атрибутами [Required], [Range] и т.д.). Невалидная модель приводит к ответу 400 Bad Request с деталями ошибок.