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

使用oapi-codegen+Chi路由时,如何支持含斜杠的路径参数?

解决Chi Router路径参数包含斜杠的匹配问题

核心原因

Chi默认的路径参数{full}只会匹配到下一个斜杠(/),带斜杠的参数会被拆解成多个路径段,导致路由匹配失败返回404。要让参数匹配包含斜杠的完整字符串,需要调整路由的匹配规则。

解决方案

方案1:修改API YAML规范,让oapi-codegen生成支持斜杠的路由

在OpenAPI的路径定义中,给路径参数添加正则表达式约束,确保匹配所有字符(包括斜杠):

/endpoint/{full:.+}:
  get:
    parameters:
      - name: full
        in: path
        required: true
        schema:
          type: string
    responses:
      201:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Thing'

重新用oapi-codegen生成代码后,生成的路由会变成:

r.Get(options.BaseURL+"/endpoint/{full:.+}", wrapper.Endpoint)

此时Chi会将/endpoint/之后的所有内容作为full参数,包括斜杠。直接发送请求curl localhost:8080/api/v1/endpoint/anExample/OfAFullParam/WithSlashes,处理器就能获取到完整的anExample/OfAFullParam/WithSlashes参数值。

方案2:手动修改生成的路由代码(临时应急)

如果不想修改API YAML,可以直接修改生成的路由代码,使用Chi的通配符语法*full:

r.Group(func(r chi.Router) {
    r.Get(options.BaseURL+"/endpoint/*full", wrapper.Endpoint)
})

这种情况下,Chi会把/endpoint/之后的全部路径作为full参数传递给处理器,同样支持带斜杠的参数。

注意事项

  • 如果存在其他以/endpoint/开头的具体路由(比如/endpoint/info),需要将这些路由定义在通配符路由之前,否则会被通配符路由优先匹配。
  • 两种方案都不需要手动转义斜杠,请求中的斜杠会被直接解析为参数的一部分。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 08:50:30