.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
相关产品推荐
相关产品推荐

