根据Microsoft文档,如果模型属性不可为空,则默认情况下将其视为必需属性,因此无需显式添加[Required]
属性。
默认情况下,验证系统将非空参数或属性视为具有[Required]属性的属性。十进制和整数等值类型不可为空。 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
,则Age属性绑定为0,并且模型验证不会失败。即使使用[Required]
,模型验证仍然不会失败,并且将0分配给Age
。那么,如何真正使具有“非空”类型的属性成为“必需”呢?
答案 0 :(得分:2)
三个选项恕我直言:
Age
不是default
值Range
属性nullable
[Required]
public int? Age { get; set; }
nullable-required是一个很好的解决方案还是一个肮脏的解决方法,这在很大程度上取决于您的情况。