WebApi Core:强制要求传入整数类型的输入参数
问题解决:强制WebApi要求传入Id参数
问题原因
你遇到的情况根源在于:
int是值类型,默认值为0,当JSON中未传入id时,序列化器会自动给id赋值为0,模型验证会判定该字段存在有效值,不会触发错误。[BindRequired]主要适配表单绑定场景(如FormData提交),对JSON序列化的请求兼容性差,无法检测到JSON中缺失的字段。
解决方案
方案1:将Id改为可空值类型并搭配[Required]
这是最直接的实现方式,把int改为int?(可空整数类型),结合[Required]属性后,当JSON中未传入id时,id会被赋值为null,触发必填验证:
public class sampleModel { [Required(ErrorMessage = "Id是必填项")] public int? id { get; set;} [Required] public string Name { get; set; } }
方案2:范围验证(针对必须保留非可空int的场景)
如果业务要求必须使用非可空int类型,可以通过[Range]属性限制id不能为默认值0,以此间接实现必填校验:
public class sampleModel { [Range(1, int.MaxValue, ErrorMessage = "Id是必填项")] public int id { get; set;} [Required] public string Name { get; set; } }
注意:此方法的前提是业务逻辑中id不会取0值,否则会出现误判。
验证生效说明
修改完成后,再次用Postman发送缺失id的JSON请求,WebApi会返回包含"Id是必填项"错误信息的验证失败响应。
内容的提问来源于stack exchange,提问作者Smita Nk
相关产品推荐
相关产品推荐

