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

如何在ASP.NET MVC中匹配任意URL路径的最后一段?

路由匹配问题:捕获任意前缀后匹配固定结尾路径

需求场景:
需要让多个控制器操作由URL的最后一段触发,示例URL如下:

/this/is/a/path/do-this-thing
/this/is/also/a/path/do-this-other-thing

do-this-thing 和 do-this-other-thing 是需要匹配的固定结尾部分,前面的路径可以是任意内容,希望将前缀部分捕获为名为path的变量。

遇到的问题:

  1. 通配符模式仅允许放在路径末尾,以下写法会抛出异常:
{*path}/do-this-thing
  1. 尝试使用正则表达式路由,但无法成功匹配:
{path:regex(.*)}/do-this-thing

更新:经排查,问题与斜杠有关,斜杠会干扰正则表达式路由的解析逻辑。

解决方案

方法1:使用非贪婪正则匹配

修改正则为非贪婪模式,让它匹配到最后一个斜杠之前的所有内容,避免贪婪匹配吃掉整个路径:

{path:regex(.*?)}/do-this-thing

.*?是非贪婪匹配,会在遇到第一个/do-this-thing时停止匹配,从而正确捕获前面的前缀路径。

方法2:结合正向预查的正则规则

如果框架支持正向预查,可以用正则明确匹配到/do-this-thing之前的所有内容:

{path:regex(.+)(?=\/do-this-thing)}

这种写法会精准定位到目标结尾的前一个斜杠位置,确保前缀路径被完整捕获。

方法3:适配框架的路由优先级配置

若使用的框架支持路由优先级(如ASP.NET Core、Spring MVC等),可以调整路由定义顺序,优先匹配固定结尾的路由:
以ASP.NET Core为例:

app.MapControllerRoute(
    name: "DoThisThingRoute",
    pattern: "{*path}/do-this-thing",
    defaults: new { controller = "YourController", action = "DoThisThing" }
);

注意:部分框架确实限制通配符只能在末尾,此时优先采用正则方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 16:23:21