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
相关产品推荐
相关产品推荐

