ASP.net Core API:ValidationVisitor 超出了最大配置的验证深度“32”

Fer*_*lek 5 c# asp.net-core

当我从 docker 容器运行 ASP.Net 核心 Web API 时,它会引发验证错误:

System.InvalidOperationException:验证类型“ClassName”时,ValidationVisitor 超出了配置的最大验证深度“32”。这可能表示非常深或无限递归的对象图。考虑修改“MvcOptions.MaxValidationDepth”或取消对模型类型的验证。

我唯一能找到有关此问题的讨论的地方是在 这里,似乎在最新版本的 ASP.net 核心上提供了修复程序。我将我的 .net 核心版本更新到最新版本,但仍然面临同样的问题。
这是验证导致问题的类的代码:

        [Required]
        [Range(1, long.MaxValue)]
        public long Id { get; set; }
        [Required(AllowEmptyStrings = false)]
        [StringLength(1000)]
        public string Name { get; set; }
        [Required(AllowEmptyStrings = false)]
        [StringLength(200)]
        public string Category { get; set; }
        [Required(AllowEmptyStrings = false)]
        [StringLength(13)]
        public string Division { get; set; }
Run Code Online (Sandbox Code Playgroud)

重要提示:我是唯一面临此问题的人,因为我团队的其他成员正在成功运行该项目,非常感谢任何帮助。

小智 7

这是影响MVC和Web Api的Asp.Net Core ModelBinding Validation中的一个错误 https://github.com/dotnet/aspnetcore/issues/13778

一种解决方法是在 Startup.ConfigureServices 中增加 MaxModelValidationErrors:

services.AddMvc()
    .AddMvcOptions(options => {
    options.MaxModelValidationErrors = 999999;
})
Run Code Online (Sandbox Code Playgroud)

  • 该问题已于 2020 年 4 月 14 日得到解决。仅供参考。 (2认同)

小智 7

增加 MaxModelValidationErrors 并没有解决我的问题,我必须更改不同的值(MaxValidationDepth)才能使事情正常工作。想在这里添加它,以防有人遇到和我一样的问题。

.AddMvcOptions(options =>
        {
            options.MaxValidationDepth = 999;
        });
Run Code Online (Sandbox Code Playgroud)