繁体   English   中英

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,则RequiredRange验证器都不起作用且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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM