Что именно меняет MvcOptions.SuppressImplicitRequiredAttributeForNonNullableReferenceTypes?

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

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

Итак, подведем итог:

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

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

Всего 1 ответ


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

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

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

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

public string A { get; set; }

public string? B { get; set; }

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


Есть идеи?

10000