MvcOptions.SuppressImplicitRequiredAttributeForNonNullableReferenceTypes究竟发生了什么变化?

问题描述 投票:0回答:1

据我了解,当[Required]设置为MvcOptions.SuppressImplicitRequiredAttributeForNonNullableReferenceTypes时,值类型隐式具有false属性。但坦率地说,当我在两者之间切换时,看不到任何区别。

此外,如果我在非空类型(例如[Required])上显式使用int属性,则会require设置其值,而不是仅在没有给定值的情况下访问端点int参数,将为其类型指定一个默认值-0

所以,总结一下:

  1. 如果隐式添加[Required]属性,为什么显式变体提供完全不同的功能?

  2. 启用/禁用MvcOptions.SuppressImplicitRequiredAttributeForNonNullableReferenceTypes是否有功能上的区别?据我所知,它没有任何改变。

c# asp.net-core model-view-controller data-annotations model-validation
1个回答
2
投票

我实际上还没有尝试过此设置,但我认为线索在于名称:SuppressImplicitRequiredAttributeFor NonNullableReferenceTypes

听起来似乎不适用于值类型。它适用于非空引用类型。

正如您所说,类型为int的属性将始终具有默认值,模型验证器不知道该值是否丢失或是否已设置为该值。

但是,如果启用C#8可为空的引用类型,您可以具有以下属性:

public string A { get; set; }

public string? B { get; set; }

现在已设置此设置,A属性将获得Required属性。它仍然是引用类型,可以为null。因此检查是有意义的。

© www.soinside.com 2019 - 2024. All rights reserved.