我刚刚转移到 ASP.NET Core 3.0,似乎继承的模型验证被破坏了,或者我遗漏了一些东西。当我用 IlVal00 = null
发布以下模型时, 它说:
title=One or more validation errors occurred. status=400, The IlVal00 field is required.
public class Stock : BaseClass
{
[Required]
public string Ref { get; set; } = default!;
}
public class BaseClass
{
public string? IlVal00 { get; set; }
}
但是,如果我将模型更改为以下内容,它会起作用:
public class Stock : BaseClass
{
[Required]
public string Ref { get; set; } = default!;
public new string? IlVal00 { get; set; }
}
public class BaseClass
{
public string? IlVal00 { get; set; }
}
但我需要这个来支持继承。有没有人知道如何使这项工作?
谢谢。
最佳答案
当我经历了一个非常接近的场景时,我会在这里添加一个答案,以防其他人遇到相同或类似的问题:
就我而言,问题涉及一个以 .NET Core 3.1 作为目标框架的项目,继承不是问题的一部分。我的项目有一个 NuGet 包 dll 作为它的依赖项之一,这样的包有几个模型。我们的 Controller 端点将这些模型作为参数。但是,发送到这些端点中的任何一个(以这些模型中的任何一个作为主体)的请求都会导致不可为空的引用类型属性的验证错误。
解决它的解决方法类似于此处建议的方法:
https://github.com/dotnet/aspnetcore/issues/14812 .我从 Startup 的 ConfigureServices 方法向 AddControllers 方法添加了以下选项:
services.AddControllers(options => options.SuppressImplicitRequiredAttributeForNonNullableReferenceTypes = true);
请注意,通过使用此解决方法,需要为应用程序周围的可为空引用类型属性手动添加 [Required] 属性。我还在他们的存储库中打开了一个问题:
https://github.com/dotnet/aspnetcore/issues/27448
关于asp.net-core - 带有继承的 ASPNET Core 3.0 模型验证错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58280985/