EF Core请求中idList字段必填错误的解决求助
问题解决方法
核心问题:GET 请求不支持 [FromBody] 绑定
ASP.NET Core 中,GET 请求的设计初衷是不带请求体的,框架对 GET 请求的 [FromBody] 参数绑定支持有限,这是导致你收到必填字段错误的根本原因。
方案一:改用 POST 请求(推荐)
1. 修改控制器方法
将 HttpGet 改为 HttpPost,保留 [FromBody] 绑定:
[HttpPost("listById")] public async Task<IActionResult> ListById([FromBody] IdListDto idList) => await Handle(Service.FindByList(idList));
2. 调整请求格式
请求体使用与 IdListDto 匹配的 JSON 结构,同时确保请求头设置 Content-Type: application/json:
{ "Ids": [123, 456, 789] }
方案二:坚持使用 GET 请求(不推荐,不符合 REST 规范)
如果必须用 GET,放弃 [FromBody],改用查询参数传递 ID 列表:
1. 修改控制器方法
[HttpGet("listById")] public async Task<IActionResult> ListById([FromQuery] ulong[] ids) => await Handle(Service.FindByList(new IdListDto { Ids = ids }));
2. 请求示例
URL 格式:/listById?Ids=123&Ids=456&Ids=789
额外优化建议
如果业务要求必须传入 ID 列表,可给 IdListDto 的 Ids 字段添加必填验证,避免空数组情况:
public record IdListDto : IIdListDto { [Required] public ulong[] Ids { get; set; } = Array.Empty<ulong>(); }
内容的提问来源于stack exchange,提问作者TaCqz
相关产品推荐
相关产品推荐

