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

移除ASP.NET Core MVC字段required修饰符仍触发必填验证的问题

问题分析与解决方法

这不是ASP.NET Core的Bug,大概率是Nullable引用类型的隐式验证导致的,以下是具体原因和解决步骤:

核心原因:Nullable上下文的自动验证

如果你的项目启用了Nullable引用类型(在.csproj文件中配置了<Nullable>enable</Nullable>),那么string类型会被视为非可空类型。ASP.NET Core的模型验证系统会自动为非可空引用类型添加[Required]验证规则,即使你移除了required修饰符,这种隐式验证依然会生效。

解决步骤

  1. 修改字段为可空类型
    如果希望Name字段是可选的,直接将类型改为string?:

    public class Person
    {
        public int Id { get; set; }
        public string? Name { get; set; }
    }
    
  2. 检查是否存在手动添加的[Required]注解
    确认Name字段上没有残留的[Required]数据注解(可能是之前添加后忘记删除):

    // 错误示例:不要保留这个注解
    [Required]
    public string Name { get; set; }
    
  3. 彻底清理项目缓存
    手动删除项目目录下的bin和obj文件夹,然后重新构建项目,确保旧的编译产物被完全清除。

  4. 验证项目的Nullable配置
    打开项目的.csproj文件,确认Nullable配置是否符合你的需求:

    • 如果你不需要全局的非空验证,可以将<Nullable>enable</Nullable>改为<Nullable>disable</Nullable>(不推荐,Nullable是C#的优秀特性)。
    • 保持enable的前提下,通过?标记可选的引用类型字段即可。
  5. 重启开发服务器
    关闭并重启IIS Express或Kestrel服务器,确保新的模型验证规则被加载。


内容的提问来源于stack exchange,提问作者stellr42

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 06:54:56