ASP.NET Core中未标记Required的Note字段被要求传入,如何解决?
问题原因及解决方案
你的Note字段被判定为必填,核心原因是在.NET 6及以上版本中,默认启用了可空引用类型(Nullable Reference Types)。此时,未标记为可空的string类型会被视为非空类型,自动触发必填验证——哪怕你没手动添加[Required]特性。
以下是三种可行的解决方法:
方法一:将Note改为可空引用类型
直接给string加上?标记,明确它是可空的:
public class UpdateActionRequest { [Required] public int ActionId { get; set; } [Required] public int LeadId { get; set; } [Required] public int AssignedToUserId { get; set; } // 改为可空引用类型 public string? Note { get; set; } public DateTime? PlannedDate { get; set; } }
方法二:使用[AllowNull]特性
如果你不想修改类型声明,可以给Note字段添加[AllowNull]特性,允许它被赋值为null:
public class UpdateActionRequest { [Required] public int ActionId { get; set; } [Required] public int LeadId { get; set; } [Required] public int AssignedToUserId { get; set; } [AllowNull] public string Note { get; set; } public DateTime? PlannedDate { get; set; } }
方法三:全局禁用可空引用类型的自动验证(不推荐)
如果项目不需要可空引用类型的验证,可以在项目文件(.csproj)中修改配置,关闭相关检查:
<PropertyGroup> <!-- 关闭可空引用类型 --> <Nullable>disable</Nullable> <!-- 关闭非空引用类型的自动必填验证 --> <EnableNullableContexts>false</EnableNullableContexts> </PropertyGroup>
这种方法会影响整个项目的类型检查逻辑,不建议在已有项目中随意使用。
内容的提问来源于stack exchange,提问作者Pete
相关产品推荐
相关产品推荐

