【问题标题】:What exactly does MvcOptions.SuppressImplicitRequiredAttributeForNonNullableReferenceTypes change?MvcOptions.SuppressImplicitRequiredAttributeForNonNullableReferenceTypes 到底发生了什么变化?
【发布时间】:2020-03-24 11:45:44
【问题描述】:

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

此外,如果我在不可为空的类型上显式使用[Required] 属性,例如int,它将要求我设置它的值,而不仅仅是点击没有给定 int 参数的端点,将为其类型分配一个默认值 - 0

所以,总结一下:

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

  2. 启用/禁用MvcOptions.SuppressImplicitRequiredAttributeForNonNullableReferenceTypes 是否有任何功能差异?据我所知,它并没有改变任何东西。

【问题讨论】:

  • 这是关于“不可为空的引用类型”,int 是值类型

标签: c# asp.net-core model-view-controller data-annotations model-validation


【解决方案1】:

我实际上还没有尝试过这个设置,但我认为线索就在名称中:SuppressImplicitRequiredAttributeForNonNullableReferenceTypes

听起来它不适用于值类型。 它适用于不可为空的引用类型。

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

但是,如果启用 C# 8 可空引用类型, 你可以有这样的属性:

public string A { get; set; }

public string? B { get; set; }

现在,通过该设置设置,A 属性将获得必需属性。 它仍然是一个引用类型,可以为空。 因此,检查是有意义的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 2012-08-29
    相关资源
    最近更新 更多