据我了解,当[Required]
设置为MvcOptions.SuppressImplicitRequiredAttributeForNonNullableReferenceTypes
时,值类型隐式具有false
属性。但坦率地说,当我在两者之间切换时,看不到任何区别。
此外,如果我在非空类型(例如[Required]
)上显式使用int
属性,则会require设置其值,而不是仅在没有给定值的情况下访问端点int
参数,将为其类型指定一个默认值-0
。
所以,总结一下:
如果隐式添加[Required]
属性,为什么显式变体提供完全不同的功能?
启用/禁用MvcOptions.SuppressImplicitRequiredAttributeForNonNullableReferenceTypes
是否有功能上的区别?据我所知,它没有任何改变。
我实际上还没有尝试过此设置,但我认为线索在于名称:SuppressImplicitRequiredAttributeFor NonNullableReferenceTypes。
听起来似乎不适用于值类型。它适用于非空引用类型。
正如您所说,类型为int
的属性将始终具有默认值,模型验证器不知道该值是否丢失或是否已设置为该值。
但是,如果启用C#8可为空的引用类型,您可以具有以下属性:
public string A { get; set; }
public string? B { get; set; }
现在已设置此设置,A
属性将获得Required属性。它仍然是引用类型,可以为null。因此检查是有意义的。