ASP.NET Web API注册用户时JSON转System.Nullable`1[System.Int32]失败求助
解决ASP.NET Web API中Pin字段JSON转换400错误的方法
问题根源
你提交的12345678901超出了int类型的取值范围(int最大值为2147483647),所以JSON序列化器无法将其转换为Nullable<int>,导致400请求错误。
具体解决步骤
- 修改模型字段类型:
把实体模型中Pin字段的类型从int?改成以下两种类型之一:long?:如果Pin需要作为数值使用(比如参与计算),long的取值范围更大(最大9223372036854775807),完全能容纳你提交的数值。示例代码:public long? Pin { get; set; }string:如果Pin只是作为标识字符串(比如验证码、用户PIN码,不需要数值计算),用字符串类型更稳妥,还能避免数值溢出、前导零丢失等问题。示例代码:public string Pin { get; set; }
- 同步Swagger请求格式:修改类型后,Swagger UI的请求示例会自动更新。如果改成
long?,直接提交数字即可;如果改成string,记得给Pin值加双引号(比如"12345678901")。 - 添加输入验证(可选):
为了确保Pin格式符合要求,可以给字段加验证特性:- 若用
long?,可加范围验证:[Range(10000000000, 99999999999)](根据你的Pin长度需求调整) - 若用
string,可加正则验证:[RegularExpression(@"^\d{11}$")](限制为11位数字)
- 若用
- 排查序列化配置:如果修改类型后仍有问题,检查项目中
Program.cs或Startup.cs里的JsonSerializerOptions配置,确保没有强制将数字转换为int的自定义规则。
内容的提问来源于stack exchange,提问作者Nikusha Gabidzashvili
相关产品推荐
相关产品推荐

