ASP.NET Core 6.0:如何编写匹配/path:action格式URL的动作路由模板?
ASP.NET Core 6.0 路由模板解决方案
要实现匹配/api/1/pets/123/toys/456:renew的路由,核心是处理路由模板中冒号的特殊含义——ASP.NET Core路由里冒号默认是参数约束的分隔符,直接写:renew会被路由系统误判为约束语法,而非字面量后缀。
正确的写法是对冒号进行转义,在动作方法上使用带转义的路由模板:
[HttpPost] // 根据业务需求选择合适的HTTP方法(如Put、Post) [Route(@"\:renew")] public IActionResult Renew(int version, long petId, long toyId) { // 业务逻辑代码 return Ok(); }
也可以使用双反斜杠的转义写法(适配C#字符串的转义规则):
[Route("\\:renew")]
为什么之前的写法不生效?
- 使用
[Route(":renew")]时,路由系统会将:renew解析为参数约束规则,而非字面量后缀,导致无法匹配目标URL,返回404。 - 使用
[Route("renew")]时,路由系统会自动在控制器路由前缀后添加斜杠,生成path/renew格式的路径,不符合path:renew的需求。
内容的提问来源于stack exchange,提问作者Evgeni Nabokov
相关产品推荐
相关产品推荐

