WebAPI中如何通过数据注解在请求体为空时返回BadRequest?
解决Web API空请求体时ModelState.IsValid返回true的问题
这个问题我之前也碰到过!核心原因是:当请求体为空时,Web API会把model绑定为null,但默认情况下,ModelState只会验证非null模型的属性——既然模型本身是null,那些加在Business类上的数据注解根本不会触发验证,所以ModelState.IsValid自然返回true。
要通过数据注解解决这个问题,最简单直接的方式就是给参数本身添加[Required]特性:
public class BusinessesController: ApiController { [HttpPost] public IHttpActionResult Post([FromBody][Required] Business model) { if(!ModelState.IsValid) { return BadRequest(ModelState); } /*do stuff*/ return Accepted(); } }
添加[Required]后,Web API会在绑定阶段就检查model是否为null:如果请求体为空导致model是null,它会自动往ModelState里添加一条错误信息,此时ModelState.IsValid就会返回false,代码会正确进入BadRequest分支。
如果你需要更自定义的错误提示,还可以给[Required]添加参数:
[Required(ErrorMessage = "请求体不能为空,请提供有效的Business数据")]
这样返回的错误信息会更友好,方便前端排查问题。
内容的提问来源于stack exchange,提问作者Nathan Tregillus
相关产品推荐
相关产品推荐

