【发布时间】:2019-09-09 16:05:32
【问题描述】:
我正在使用 ASP.NET Core 2.0 默认模型验证,尽管模型中有错误的数据,但它似乎无法使用 ModelState.IsValid 始终为真。
[HttpPost("abc")]
public async Task<IActionResult> Abc([FromBody]AbcViewModel model)
{
if (!ModelState.IsValid) { return BadRequest(ModelState); }
...
}
public class AbcViewModel
{
[Required(ErrorMessage = "Id is required")]
[Range(100, int.MaxValue, ErrorMessage = "Invalid Id")]
public int Id { get; set; }
public bool Status { get; set; }
}
当我从 Angular 应用程序发布数据时,这些值正确映射到模型,但如果 Id 为“0”或小于 100,则 Required 和 Range 验证器都不起作用,ModelState.IsValid总是正确的。我错过了什么?
【问题讨论】:
-
您需要将Id设置为可为空,否则即使客户端未在请求中发送Id,该值也会默认为0。
-
我已经完全复制了您的代码,但无法重现您的问题。但是需要注意的一点是:
Required检查一个值是否不是null、一个空字符串或空格。在您的情况下,Id是不可为空的int,因此它始终会提供一个值。 -
好吧,我得到了 required 的情况,因为它应该可以为空才能工作。但是 Range 属性呢,为什么它不起作用?
-
@AliShahzad,对我来说也一样,
Range按预期工作 - 当Id超出范围或未提供(默认为零)时,我得到一个400 BadRequestPOST /api/values/ abc HTTP/1.1 主机:localhost:61154 内容类型:application/json 缓存控制:无缓存 Postman-Token:62024574-776a-4e1b-93b7-6a7bb78ecfca {“Id”:1 } 400 Bad Request {“Id” :["无效 ID"]} -
@ironstone13 但它对我不起作用,我想我错过了一些东西
标签: c# asp.net-core model-validation