![](/img/trans.png)
[英]Model normalization before model validation in Asp.Net Core 2.0+
[英]asp.net core 2.0 model validation not validating data
我正在使用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 app发布数据时,值正确映射到模型,但如果Id
为“0”或小于100,则Required
和Range
验证器都不起作用且ModelState.IsValid
始终为true。 我错过了什么?
如果您正在使用services.AddMvcCore()
,那么您需要显式设置应用程序以使用数据注释执行验证:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvcCore()
.AddDataAnnotations()
/* etc. */;
}
我使用了您在模型中定义并面临同样问题的相同模型属性。 我在属性中进行了一处更改,并在属性上定义了DataMember属性,如:
[Required(ErrorMessage = "Id is required")]
[Range(100, int.MaxValue, ErrorMessage = "Invalid Id")]
[DataMember(Name = "Id")]
public int Id { get; set; }
它按预期工作,验证范围值。 试试这个,希望它能解决你所面临的问题。
我也解决了这个问题,在我的案例中有什么帮助在ConfigureServices中添加:
services.AddMvc(opt=> {
opt.AllowValidatingTopLevelNodes = true;
});
只是要小心结果 - 如果你想获得自动BadRequest,你必须使用[ApiController]
属性 。 否则,您必须检查ModelState.IsValid
属性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.