具有继承的ASPNET Core 3.0模型验证错误

时间:2019-10-08 06:10:12

标签: asp.net-core asp.net-core-3.0

我刚移到aspnetcore 3.0,似乎继承模型验证失败或我错过了一些东西。 当我发布带有IlVal00 = null的以下模型时,它说:title =发生一个或多个验证错误。 status = 400,必须输入IlVal00字段。

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; }
}

有效。

但是我需要继承...

那么,如果有人对如何使其起作用有想法?

谢谢

2 个答案:

答案 0 :(得分:0)

尝试像这样使用虚拟:

public virtual string? IlVal00 { get; set; }

答案 1 :(得分:0)

当我经历一个非常接近的场景时,我将在此处添加一个答案,以防其他人遇到相同或相似的问题:

就我而言,问题涉及到一个以.NET Core 3.1作为目标框架的项目,继承不是问题的一部分。我的项目有一个NuGet程序包dll作为其依赖项之一,并且此类程序包具有多个模型。我们的控制器端点将这些模型作为参数。但是,发送到这些端点中的任何一个(以那些模型中的任何一个为主体)的请求引起了对非空引用类型属性的验证错误。

解决此问题的方法类似于此处建议的解决方法: https://github.com/dotnet/aspnetcore/issues/14812。我从Startup的ConfigureServices方法向AddControllers方法添加了以下选项:

services.AddControllers(options => options.SuppressImplicitRequiredAttributeForNonNullableReferenceTypes = true);

请注意,通过使用此替代方法,有必要为应用程序周围的可为空的引用类型属性手动添加[Required]属性。

我还在他们的资料库中打开了一个问题: https://github.com/dotnet/aspnetcore/issues/27448