ASP.NET 核心模型验证未按预期工作
ASP.NET core model validation doesn't work as expected
根据 Microsoft 文档,如果模型 属性 不可为空,则默认情况下认为它是必需的,因此无需显式添加 [Required]
属性。
By default, the validation system treats non-nullable parameters or properties as if they had a [Required] attribute. Value types such as decimal and int are non-nullable.
https://docs.microsoft.com/en-us/aspnet/core/mvc/models/validation?view=aspnetcore-2.2#required-attribute
但事实并非如此。假设我有以下模型:
public class Model
{
[Required]
public string Name { get; set; }
public int Age { get; set; }
}
如果请求的正文中不包含 Age
,则 0 将绑定到年龄 属性,并且模型验证不会失败。即使 [Required]
,模型验证仍然没有失败,0 被分配给 Age
。那么如何使具有不可空类型的属性真正 "required"?
三个选项恕我直言:
- 验证自己
Age
不是 default
值
- 使用
Range
属性
- 将其设为必需并且
nullable
[Required]
public int? Age { get; set; }
nullable-required 是一个很好的解决方案还是一个肮脏的解决方法,这在很大程度上取决于您的情况。
根据 Microsoft 文档,如果模型 属性 不可为空,则默认情况下认为它是必需的,因此无需显式添加 [Required]
属性。
By default, the validation system treats non-nullable parameters or properties as if they had a [Required] attribute. Value types such as decimal and int are non-nullable. https://docs.microsoft.com/en-us/aspnet/core/mvc/models/validation?view=aspnetcore-2.2#required-attribute
但事实并非如此。假设我有以下模型:
public class Model
{
[Required]
public string Name { get; set; }
public int Age { get; set; }
}
如果请求的正文中不包含 Age
,则 0 将绑定到年龄 属性,并且模型验证不会失败。即使 [Required]
,模型验证仍然没有失败,0 被分配给 Age
。那么如何使具有不可空类型的属性真正 "required"?
三个选项恕我直言:
- 验证自己
Age
不是default
值 - 使用
Range
属性 - 将其设为必需并且
nullable
[Required]
public int? Age { get; set; }
nullable-required 是一个很好的解决方案还是一个肮脏的解决方法,这在很大程度上取决于您的情况。