ASP.NET 核心模型验证无法按预期工作
Posted
技术标签:
【中文标题】ASP.NET 核心模型验证无法按预期工作【英文标题】:ASP.NET core model validation doesn't work as expected 【发布时间】:2019-10-01 04:08:48 【问题描述】:根据 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
,则 0 将绑定到 Age 属性并且模型验证不会失败。即使使用[Required]
,模型验证仍然不会失败,并且0 分配给Age
。那么如何使不可为空类型的属性真正“必需”?
【问题讨论】:
【参考方案1】:三个选项恕我直言:
验证自己Age
不是 default
值
使用Range
属性
将其设为必需并nullable
[Required]
public int? Age get; set;
如果 nullable-required 是一个很好的解决方案还是只是一个肮脏的解决方法,这在很大程度上取决于您的情况。
【讨论】:
[BindRequired]
可能是更好的选择。
@KirkLarkin 仍然 ModelState.IsValid 为真,也许它只是在将opt.SuppressModelStateInvalidFilter = value;
设置为default
或false
而不是true
进入操作之前工作。以上是关于ASP.NET 核心模型验证无法按预期工作的主要内容,如果未能解决你的问题,请参考以下文章
拍卖计时器在 Asp.net webAPI 中没有按预期工作