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

ASP.NET Web API GET请求查询参数被忽略使用默认值的原因是什么

问题原因
  • 你的Action方法上的Route特性声明了{startTime}/{endTime}路径参数模板,这会让ASP.NET Core路由系统默认将这两个参数的绑定源设为路径路由数据,不会主动去查询字符串中匹配同名参数。
  • 你为路径参数配置了默认值,所以当你发送不带路径参数、仅带查询参数的请求时,路由仍然可以匹配成功,但路径中没有对应参数值,方法就直接使用预设的默认值,完全忽略了查询字符串的传入参数。
修复方案

方案1:仅支持查询参数形式(适配你需求的目标接口)

直接删除Action上Route特性的路径参数模板即可,简单类型参数在GET请求下默认会从查询字符串绑定:

[ApiController]
[Route("/api/sessions/byhour")]
public class LoginStatsByHourController : ControllerBase
{
    [HttpGet]
    public List<SessionEntry> GetSessionEntryByDate(string startTime, string endTime)
    {...}
}

修改后即可正常响应{apiUrl}/api/sessions/byhour?startTime=xxx&endTime=xxx形式的请求。

方案2:同时支持路径参数+查询参数两种传参方式

如果需要兼容两种传参格式,可以配置多路由模板,同时为参数指定多个绑定源:

[ApiController]
[Route("/api/sessions/byhour")]
public class LoginStatsByHourController : ControllerBase
{
    [HttpGet]
    [Route("")] // 匹配查询参数请求
    [Route("{startTime=0001-01-01T12:00:00}/{endTime=9999-12-31T11:59:59}")] // 匹配路径参数请求
    public List<SessionEntry> GetSessionEntryByDate([FromRoute][FromQuery] string startTime, [FromRoute][FromQuery] string endTime)
    {...}
}

这种配置下,会优先取路径参数的值,路径无对应参数时自动读取查询参数的值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:15:02