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

ASP.NET Core 6.0 MVC路由:如何同时支持路径参数与查询参数?

问题原因

当前的[HttpGet("users/{userId}")]路由模板仅匹配URL路径中的路由参数(即users/7这种形式),而users?userid=7属于查询字符串参数,ASP.NET Core的路由系统找不到对应匹配的Action方法,因此返回404错误。

解决方案

有两种简洁的修改方式,都能同时支持两种请求格式:

方式一:调整路由模板并允许参数可选

修改路由模板为"users/{userId?}",让路由参数可选,ASP.NET Core会自动尝试从查询字符串绑定匹配名称的参数(默认不区分大小写):

[HttpGet("users/{userId?}")]
public IActionResult GetUser(int userId)
{ ... }

注:即便userId是必填参数,这种写法依然有效——当请求不带路由参数时,框架会自动从查询字符串获取userid的值。

方式二:显式指定参数的绑定来源

如果需要更明确地控制参数来源(比如查询字符串参数名和路由参数名存在差异),可以给参数添加[FromRoute]和[FromQuery]特性,允许参数同时从路由或查询字符串获取:

[HttpGet("users/{userId}")]
public IActionResult GetUser([FromRoute][FromQuery(Name = "userid")] int userId)
{ ... }

这种写法下,无论参数是在URL路径里还是查询字符串中,都能正确绑定到userId参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 07:11:00