Почему входная модель равна нулю в asp. net основном действии - PullRequest
0 голосов
/ 02 февраля 2020

Я отправляю заказ своему API.

Обычно он работает нормально. Но иногда inputModel имеет значение null.

Почему это происходит?

public async Task<Order> NewAsync(OrderInput input)

1 Ответ

0 голосов
/ 02 февраля 2020

Модель ввода будет иметь нулевое значение в контроллере, если InputModel не соответствует фактическим параметрам, переданным ему.

Для ясности: контроллеру все равно, если ему переданы дополнительные параметры, он будет просто игнорируйте их.

Но если есть «обязательный» параметр, такой как:

public int TypeId{get;set;}

, и это не предусмотрено, тогда вся входная модель будет нулевой.

Если TypeId действительно необязателен, то сделать его обнуляемым, а затем модель ввода просто установит для него значение null.

public int? TypeId{get;set;} 

Подводя итог: контроллеру было передано нулевое значение для InputModel для который InputModel не позволяет null. В результате вся inputModel при обработке будет иметь значение null.

Это может быть неприятно, поскольку не выдается исключение, все, что вы получаете, это нулевая модель.

Исправление заключается в сравнении опубликуйте параметры в браузере вместе с моделью и найдите, какие параметры являются нулевыми, которых не должно быть. Это случается со мной гораздо чаще, чем я хотел бы признать, и каждый раз мне приходится останавливаться и снова разбираться в этом, поэтому я подумал, что буду go вперед и отправлю это здесь, чтобы напомнить себе в следующий раз.

...