You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core 2.2项目中默认数值验证错误信息不符预期问题排查

问题原因&解决办法

嘿,这个问题我之前在项目里也碰到过!你看到的"ABC" is not valid其实是模型绑定失败时的默认提示,和[Required]这类数据注解触发的验证消息不是一回事儿。当用户输入的内容没法转换成decimal?类型时,ASP.NET Core的模型绑定系统会先抛出绑定错误,这部分的默认消息和数据注解的验证消息是分开配置的。

在.NET Core 2.2里,默认的模型绑定类型转换错误消息就是你看到的那种简短格式,要改成你预期的"The field ProductPrice must be a number",可以按下面的方法来配置:

最直接的解决方案:修改模型绑定错误消息

在Startup.cs的ConfigureServices方法里,给Mvc添加配置,覆盖默认的类型转换错误消息:

services.AddMvc()
    .AddMvcOptions(options =>
    {
        // 替换类型转换失败的默认提示
        options.ModelBindingMessageProvider.SetValueMustBeANumberAccessor(
            fieldName => $"The field {fieldName} must be a number");
    });

这段代码里的SetValueMustBeANumberAccessor就是专门用来设置“值必须是数字”这类错误消息的,把字符串模板改成你想要的格式就行,{fieldName}会自动替换成模型上[Display]指定的名称(也就是"Product Price")。

补充说明

你模型里的[Required]注解管的是字段不能为空的情况——比如用户啥都不填就提交,这时候会触发[Required]的默认提示(类似"The Product Price field is required.")。而输入非数字内容时,触发的是模型绑定阶段的类型转换错误,这就是为啥你看到的是另一条消息,和[Required]没关系。

如果你还想做更自定义的验证逻辑,也可以写个自定义验证属性,但上面的方案1是最省事的,直接修改框架默认配置就能解决问题。

内容的提问来源于stack exchange,提问作者Arian Shahalami

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:58:54