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

YARP路由:Match-Path规则能否使用正则表达式匹配URL模式?

YARP中使用正则表达式匹配Path路径

可以实现,但YARP默认的Path匹配规则不直接支持标准正则语法,不过有两种可靠的方式满足你的需求:

方式一:利用ASP.NET Core路由的正则约束

YARP的路由系统基于ASP.NET Core路由,可在路由模板中使用正则约束模拟你需要的匹配规则。比如要匹配/api/\w{1,3}-\d{1,9}这类路径,配置如下:

"Routes": {
  "RegexPathRoute": {
    "Match": {
      "Path": "/api/{segment:regex(^\\w{1,3}-\\d{1,9}$)}"
    },
    "ClusterId": "YourTargetCluster"
  }
}

注意:JSON字符串中的反斜杠需要转义,所以正则里的\w要写成\\w,\d写成\\d。这种方式适合单路径段的正则匹配,配置简单,无需额外代码。

方式二:自定义路径匹配策略

如果需要更复杂的正则匹配逻辑(比如多路径段组合、动态正则规则),可以通过实现YARP的IMatchPolicy扩展匹配逻辑:

  1. 创建自定义匹配策略类:
public class RegexPathMatchPolicy : IMatchPolicy
{
    public int Order => 100; // 设置优先级,确保在默认策略之前执行

    public bool Matches(HttpContext httpContext, RouteConfig route, RouteMatch match)
    {
        var regexPattern = route.Match.Path;
        if (string.IsNullOrEmpty(regexPattern)) return false;

        var requestPath = httpContext.Request.Path.Value;
        return Regex.IsMatch(requestPath, regexPattern, RegexOptions.IgnoreCase);
    }
}
  1. 在Program.cs中注册服务:
builder.Services.AddReverseProxy()
    .LoadFromConfig(builder.Configuration.GetSection("ReverseProxy"))
    .AddMatchPolicy<RegexPathMatchPolicy>();
  1. 配置文件中直接写正则表达式:
"Routes": {
  "CustomRegexRoute": {
    "Match": {
      "Path": "^/api/\\w{1,3}-\\d{1,9}$"
    },
    "ClusterId": "YourTargetCluster"
  }
}

注意事项

  • 自定义匹配策略的Order属性需合理设置,避免和默认匹配逻辑冲突
  • 使用正则约束时,路由模板中的占位符名称(比如示例中的segment)仅作为标识,不影响匹配逻辑
  • 两种方式都无需使用{**catch-all},可精准实现宽泛或具体的正则路径匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 12:55:21