You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 09:06:04