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

.NET 6 WebApi传递int数组作为参数时获取空数组问题排查

解决ASP.NET Core中查询参数数组接收为空的问题

我一眼就发现问题出在哪了!你的路由模板和请求URL的格式不匹配,导致[FromQuery]特性没法正确解析数组参数。

问题根源

你的控制器方法路由定义里把lathes写成了路径参数({lathes}):

[HttpGet("top10/{lineId}/{dateTo}/{groupingType}/{lathes}")]

但实际请求里,你是把lathes当作查询参数来传递的,而且还漏掉了查询参数的起始符?——你直接把lathes=2&...拼在了路径后面,ASP.NET Core会把这整段字符串当作路径参数lathes的值,而不是解析成多个查询参数,自然[FromQuery] int[] lathes就接不到值了。

修复步骤

  1. 修改控制器路由:移除路径中的{lathes},因为你想用查询参数传递数组:
[HttpGet("top10/{lineId}/{dateTo}/{groupingType}")]
public async Task<IActionResult> GetTop10(byte lineId, DateTimeOffset dateTo, string groupingType, [FromQuery] int[] lathes) {
    // 业务逻辑代码
}
  1. 修正请求URL:在路径末尾加上?,然后用标准的查询参数格式传递数组(重复key的方式是ASP.NET Core默认支持的数组解析格式):
https://localhost:44439/api/v1/dashboards/overview/top10/1/2022-09-28/days?lathes=2&lathes=3&lathes=4&lathes=6

额外说明

如果你确实想通过路径传递数组(不推荐,数组长度多变时路径会很混乱),可以修改路由为:

[HttpGet("top10/{lineId}/{dateTo}/{groupingType}/{lathes}")]

然后请求URL用逗号分隔数组元素:

https://localhost:44439/api/v1/dashboards/overview/top10/1/2022-09-28/days/2,3,4,6

同时需要在Startup/Program.cs里配置支持逗号分隔的数组解析:

builder.Services.AddControllers(options =>
{
    options.ModelBinderProviders.Insert(0, new ArrayModelBinderProvider());
});

不过这种方式不如查询参数灵活,更推荐用第一种方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 16:32:43