ASP.NET Core 6 Web API System.Text.Json模型绑定错误信息异常
问题解决:[FromBody]提交JSON时无法获取字段级验证错误
问题根源
DateOnly是值类型(struct),本身不能为null。当你通过JSON提交null值时,System.Text.Json反序列化器无法将null转换为非可空的DateOnly,导致模型绑定直接失败,此时ASP.NET Core会返回通用的"模型字段必填"错误,根本没触发[Required]属性的字段级验证。而[FromForm]提交时,表单数据是字符串格式,模型绑定器会尝试对每个字段单独解析,解析失败时会生成对应字段的错误信息。
解决方案(推荐)
将模型中的DateOnly改为可空值类型(DateOnly?),保留[Required]属性。这样反序列化时null可以被正常接受,之后[Required]会验证该字段不能为null,返回具体的字段错误信息。
修改后的模型代码:
public class ReservationReplyViewModel { [Required(ErrorMessage = "The DueDate field is required.")] public DateOnly? DueDate { get; set; } [Required(ErrorMessage = "The CommitDate field is required.")] public DateOnly? CommitDate { get; set; } public string? Comment { get; set; } }
补充说明
如果业务上必须使用非可空的DateOnly,你需要确保客户端不会提交null值,或者在反序列化阶段为null设置默认值,但这种情况下[Required]属性会失效(因为模型字段已有值),无法触发必填验证。因此使用可空值类型配合[Required]是最直接且符合.NET设计规范的方案。
内容的提问来源于stack exchange,提问作者Lan Lin
相关产品推荐
相关产品推荐

