Что именно меняет MvcOptions.SuppressImplicitRequiredAttributeForNonNullableReferenceTypes? - PullRequest
0 голосов
/ 24 марта 2020

Насколько я понимаю, типы значений неявно имеют атрибут [Required], когда для MvcOptions.SuppressImplicitRequiredAttributeForNonNullableReferenceTypes установлено значение false. Но, честно говоря, я не вижу никакой разницы, когда я переключаю его между двумя.

Более того, если я явно использую атрибут [Required] для ненулевого типа, такого как int, он будет требует от меня установить его значение, а не просто нажать конечную точку без заданного параметра int, которому будет присвоено значение по умолчанию для его типа - 0.

Так Подводя итог:

  1. Если он неявно добавляет атрибут [Required], почему явный вариант предлагает совершенно другую функциональность?

  2. Есть ли какая-либо функциональная разница для включения / выключения MvcOptions.SuppressImplicitRequiredAttributeForNonNullableReferenceTypes? Из того, что я вижу, это ничего не меняет.

1 Ответ

2 голосов
/ 24 марта 2020

Я на самом деле еще не пробовал этот параметр, но я думаю, что ключ к этому в названии: SuppressImplicitRequiredAttributeFor NonNullableReferenceTypes .

Похоже, это не относится к типам значений. Это относится к ссылочным типам, не допускающим значения NULL.

Как вы сказали, свойство с типом int всегда будет иметь значение по умолчанию, валидатор модели не будет знать, отсутствовало ли это значение или было установлено к этому.

Однако, если вы включите C# 8 обнуляемых ссылочных типов, у вас могут быть такие свойства, как:

public string A { get; set; }

public string? B { get; set; }

Теперь при установке этого параметра свойство A получает Обязательное атрибут. Это все еще ссылочный тип и может быть нулевым. Таким образом, проверка имеет смысл.

...