asp.net-core - 带有继承的 ASPNET Core 3.0 模型验证错误

标签 asp.net-core asp.net-core-mvc asp.net-core-3.0 model-validation

我刚刚转移到 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/

相关文章:

c# - Asp.net vNext 中的 Thread.Sleep

asp.net-core - UseStatusCodePagesWithRedirects 和 UseStatusCodePagesWithReExecute 之间的区别 - Asp.net core 中的状态代码页

.net - 无法在 Blazor 中的 URL 参数中使用越南语/签名字符和空格字符

c# - ASP.NET Core 3.0 中 ExpressionHelper 的替代品?

c# - 异步计时问题

database - 数据库设置上的 asp.net-core 迁移错误

asp.net-core - Services.AddOptions() 不明确

c# - 在 ASP.net core 3.0 中更改身份登录 URL

c# - 澄清 IAsyncEnumerable 如何与 ASP.NET Web API 一起工作

c# - Azure ConnectionStrings 功能不适用于 ASP.NET 应用程序