ASP.NET Core插入Season报Organiser字段必填错误该如何解决
问题原因
这是ASP.NET Core 3.0+引入的非可空引用类型隐式必填验证规则导致的,和你加的[JsonIgnore]特性无关:
- 你的项目开启了可空引用类型(代码中存在
#nullable enable标识),Season类中的Organiser导航属性属于非可空的引用类型 - ASP.NET Core模型验证默认会给所有非可空引用类型自动加上隐式的
[Required]校验规则,即使该属性标记了[JsonIgnore]不会从请求JSON中反序列化赋值,只要模型绑定后该属性为null,就会触发校验失败,返回“The Organiser field is required”的错误 - 你之前的项目没有遇到该问题,大概率是旧项目没有开启可空引用类型,不会触发这个隐式校验规则
解决方法
- 【推荐】将
Organiser导航属性修改为可空引用类型:
[JsonIgnore] [ForeignKey("OrganiserId")] public Organiser? Organiser { get; set; }
该方案最符合业务逻辑:新增Season时只需要传入外键OrganiserId即可,导航属性本身是EF Core做关联查询时才会填充的属性,允许为null完全合理,且不会影响EF Core的外键映射逻辑。
- 给
Organiser导航属性添加[ValidateNever]特性,显式告诉模型验证器跳过该属性的校验:
[JsonIgnore] [ForeignKey("OrganiserId")] [ValidateNever] public Organiser Organiser { get; set; }
- 全局关闭非可空引用类型的隐式必填校验规则,在
Startup.cs的ConfigureServices方法中修改控制器注册配置(ASP.NET Core 5.0写法):
services.AddControllers(options => { options.SuppressImplicitRequiredAttributeForNonNullableReferenceTypes = true; });
注意该方案会影响整个项目的所有模型校验规则,如果你的项目需要依赖非可空引用类型做必填校验,不建议使用。
内容的提问来源于stack exchange,提问作者magnhan
相关产品推荐
相关产品推荐

