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

如何禁用ASP.NET Core不可空属性的默认模型属性验证?

解决方案

不需要为每个属性单独标注[ValidateNever],通过全局Mvc配置即可实现需求,且不会影响JSON语法错误的正常返回。

核心配置

在Program.cs中注册控制器和FluentValidation时,开启SuppressImplicitRequiredAttributeForNonNullableReferenceTypes开关即可:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllers()
    // 保留你原有的FluentValidation注册逻辑
    .AddFluentValidation(config =>
    {
        config.RegisterValidatorsFromAssemblyContaining<Program>();
        // 其他你自定义的FluentValidation配置...
    })
    .AddMvcOptions(options =>
    {
        // 禁用ASP.NET Core为不可空引用类型自动添加隐式[Required]验证特性
        options.SuppressImplicitRequiredAttributeForNonNullableReferenceTypes = true;
    });

// 其余中间件配置...
var app = builder.Build();
// ...
app.Run();

配置效果说明

  • 仅禁用框架针对不可空引用类型自动注入的必填验证逻辑,这部分校验将完全交给FluentValidation按你定义的规则执行
  • JSON请求的语法校验(比如JSON格式非法、字段类型不匹配等反序列化阶段错误)完全不受影响,依然会正常返回400 Bad Request结果,这部分逻辑属于输入格式化阶段,和模型验证阶段的隐式Required校验互不干扰
  • 如果你手动给属性标注了显式[Required]特性,这部分验证逻辑不会被该开关禁用,若要完全交由FluentValidation管理,手动移除这些显式特性,统一使用FluentValidation的NotNull()/NotEmpty()规则定义即可

前置条件

确保你的项目文件(.csproj)中开启了可空引用类型上下文,否则该配置不会生效:

<PropertyGroup>
  <TargetFramework>net6.0</TargetFramework>
  <Nullable>enable</Nullable>
  <!-- 其他配置... -->
</PropertyGroup>

该方案全局生效,不需要修改任何DTO类定义,比逐个属性标注[ValidateNever]的方式维护成本低很多,也不会破坏原有验证流程的分工。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 14:39:17