Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

Класс ControllerBase
Класс
ControllerBase
ControllerBase


Действия
Действия — это методы в контроллере, которые возвращают экземпляр типа
IActionResult
Task<IActionResult>
IActionResult
ActionResult
ViewResult
Привязка моделей
Привязка моделей представляет собой процесс, в рамках которого инфраструктура ASP.NET Core использует пары "имя-значение", отправленные НТТР-методом POST, для присваивания значений свойствам моделей. Для привязки к ссылочному типу пары "имя-значение" берутся из значений формы или тела запроса, ссылочные типы обязаны иметь открытый стандартный конструктор, а свойства, участвующие в привязке, должны быть открытыми и допускать запись. При присваивании значений везде, где это применимо, используются неявные преобразования типов (вроде установки значения свойства
string
int
ModelState
Словарь ModelState
Словарь
ModelState
ModelState.IsValid
false
ModelState.IsValid
true
На заметку! Проверка достоверности модели, которая тоже устанавливает записи словаря
ModelState
Добавление специальных ошибок в словарь ModelState
В дополнение к свойствам и ошибкам, добавляемым механизмом привязки, в словарь
ModelState
PetName
Car
ModelState.AddModelError("PetName","Name is required");
Чтобы добавить ошибку для целой модели, указывайте в качестве имени свойства
string.Empty
ModelState.AddModelError(string.Empty, $"Unable to create record: {ex.Message}");
Неявная привязка моделей
Неявная привязка моделей происходит, когда привязываемая модель является параметром для метода действия. Для сложных типов она использует рефлексию и рекурсию, чтобы сопоставить имена записываемых свойств модели с именами, которые содержатся в парах "имя-значение", отравленных методу действия. При наличии совпадения имен средство привязки применяет значение из пары "имя-значение", чтобы попробовать установить значение свойства. Если совпадение дают сразу несколько имен из пар "имя-значение", тогда используется значение первого совпавшего имени. Если имя не найдено, то свойство устанавливается в стандартное значение для его типа. Вот как выглядит порядок поиска пар "имя-значение":
• значения формы из HTTP-метода POST (включая отправки JavaScript AJAX);
• тело запроса (для контроллеров API);
• значения маршрута, предоставленные через маршрутизацию ASP.NET Core (для простых типов);
• значения строки запроса (для простых типов);
• загруженные файлы (для типов
IFormFile
Например, следующий метод будет пытаться установить все свойства в типе
Car
ModelState.IsValid
true
[HttpPost]
public ActionResult Create(Car entity)
{
if (ModelState.IsValid)
{
// Сохранить данные.
}
}
Явная привязка моделей
Явная привязка моделей запускается с помощью вызова метода
TryUpdateModelAsync()
false
ModelState
Create()
[HttpPost]
public async Task<IActionResult> Create()
{
var vm = new Car();
if (await TryUpdateModelAsync(vm,"",
c=>c.Color,c=>c.PetName,c=>c.MakeId, c=>c.TimeStamp))
{
// Делать что-то важное.