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

如何用Yarp实现带参数URL转发:/google/<something>转谷歌搜索

使用YARP实现带参数的URL转发

要实现将/google/<something>这类带参数的请求转发到https://www.google.com/?q=<something>,可以通过YARP的路由匹配和请求转换功能轻松完成,以下是具体实现步骤:

方式一:通过配置文件(appsettings.json)配置

在项目的appsettings.json中添加YARP的反向代理配置:

{
  "ReverseProxy": {
    "Routes": {
      "GoogleSearchRoute": {
        "ClusterId": "GoogleCluster",
        "Match": {
          "Path": "/google/{searchQuery}"
        },
        "Transforms": [
          {
            "PathRemovePrefix": "/google"
          },
          {
            "QueryStringAppend": "q={searchQuery}"
          }
        ]
      }
    },
    "Clusters": {
      "GoogleCluster": {
        "Destinations": {
          "GoogleMain": {
            "Address": "https://www.google.com/"
          }
        }
      }
    }
  }
}

配置说明:

  • 路由匹配:Match.Path中的/google/{searchQuery}会捕获路径中/google/之后的所有内容,将其作为名为searchQuery的参数。
  • 路径转换:PathRemovePrefix会移除请求路径中的/google前缀,避免转发时将该前缀带到目标URL。
  • 查询字符串追加:QueryStringAppend将捕获到的searchQuery参数添加为目标URL的q查询参数。

方式二:通过代码配置

如果偏好代码配置,可以在Program.cs中直接定义路由和集群:

var builder = WebApplication.CreateBuilder(args);

// 添加YARP服务并配置路由
builder.Services.AddReverseProxy()
    .AddRoute("GoogleSearchRoute", route =>
    {
        route.ClusterId = "GoogleCluster";
        // 匹配带参数的路径
        route.Match.Path = "/google/{searchQuery}";
        // 移除路径前缀
        route.Transforms.AddPathRemovePrefix("/google");
        // 追加查询参数
        route.Transforms.AddQueryStringAppend("q={searchQuery}");
    })
    .AddCluster("GoogleCluster", cluster =>
    {
        // 定义目标集群的地址
        cluster.Destinations.Add("GoogleMain", new DestinationConfig
        {
            Address = "https://www.google.com/"
        });
    });

var app = builder.Build();

// 映射反向代理端点
app.MapReverseProxy();

app.Run();

关键注意事项

  • 参数名称必须保持一致:路由模板中的参数名(如{searchQuery})必须和转换规则中引用的参数名完全匹配。
  • 自动URL编码:YARP会自动处理参数中的特殊字符(如空格、中文等)的URL编码,无需手动处理。
  • 扩展匹配规则:如果需要限制请求方法(如仅GET),可以在Match节点中添加Methods数组,例如:"Methods": ["GET"]。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 23:03:20