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

.NET 9迁移后控制器非空参数传null触发400错误如何解决?

.NET 9 控制器非可空参数传null返回400的解决办法

方法一:将参数改为可空类型

.NET 9 默认启用了严格的模型绑定验证规则,非可空引用类型(比如string)会被自动标记为必填项,客户端不传值或传null就会返回400错误。直接把需要接收null的参数改成可空类型即可:

[Authorize]
[HttpGet]
public async Task<IActionResult> GetAll(int pageNumber, int pageSize, string? searchString, string? orderBy, int productId = 0)
{
    if (UserId == null)
        return BadRequest();

    var products = await _mediator.Send(new GetUserConfigQuery((Guid)UserId, pageNumber, pageSize, searchString, orderBy)
    {
        ProductId = productId,
    });
    return Ok(products);
}

修改后,searchString和orderBy接收null或不传递参数都不会触发400错误,和.NET 8的行为保持一致。

方法二:全局禁用非可空参数的必填验证

如果不想逐个修改控制器参数,可以在项目的Program.cs里配置MVC选项,关闭自动为非可空引用类型添加必填验证的规则:

builder.Services.AddControllers(options =>
{
    options.SuppressImplicitRequiredAttributeForNonNullableReferenceTypes = true;
});

这个配置会让整个项目回到.NET 8的验证逻辑,所有非可空引用类型参数不再被强制要求传值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 06:04:55