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

Web API路由配置:用斜杠替代问号传递Player资源ID

ASP.NET Core 路由配置:实现RESTful风格的Player资源访问

问题

我有一个名为Player的控制器,希望通过RESTful风格的URL访问单个Player资源:
GET /msdo/v1/player/5
但目前只能通过查询参数的方式访问:
GET /msdo/v1/Player?id=1
尝试过把路由参数改成{*id}、/{id},也调整过默认路由,但都触发了500错误。

当前控制器代码

[Route("/msdo/v1/[controller]")]
[ApiController]
public class PlayerController : ControllerBase
{
    // 期望的访问路径:GET /msdo/v1/player/5
    [HttpGet(Name = "{id}")]
    public string Get(int id)
    {
        return "value";
    }
}

优化后的解决方案

不需要重复编写完整路由路径,只需在HttpGet特性中添加路由参数,复用控制器级别的路由前缀即可:

[Route("/msdo/v1/[controller]")]
[ApiController]
public class PlayerController : ControllerBase
{
    // 现在可通过 GET /msdo/v1/player/5 访问
    [HttpGet("{id}", Name = "GetPlayerById")]
    public string Get(int id)
    {
        return "value";
    }
}

关键说明

  • 控制器上的[Route]已经指定了全局前缀/msdo/v1/[controller],其中[controller]会自动映射为小写的控制器名称player
  • [HttpGet("{id}")]会将{id}参数追加到控制器路由之后,组合成完整的RESTful路径/msdo/v1/player/{id}
  • Name属性建议设置有意义的路由名称(比如GetPlayerById),方便后续通过路由名称生成链接,不要直接用{id}作为路由名称(这是之前配置无效的核心原因)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 15:40:13