如何在请求中转义正斜杠以使 url-routers 将其视为 uri 参数的一部分?
How to escape forward slash in request to make url-routers count it as part of uri parameter?
我使用 gorilla/mux 进行以下路由映射:
router.Handle("/v1/data/{param}", handler)
当我调用 curl http://localhost:8080/v1/data/hello%2Fworld
时,我得到 404
响应代码。问题是,在我的微服务中,我想将 /v1/data/
之后的所有内容解释为 param
。
捕获参数的代码如下:
uriP := mux.Vars(r)
param := uriP["param"]
是否可以使用 gorilla/mux 或任何其他路由器实现此目的?
针对您的问题:
Is it possible to achieve this using gorilla/mux or any other router?
是的,可以使用 gorilla/mux。您发布的代码没有任何问题。
错误是 page not found
,这意味着您传递的 url 没有在 mux 路由器上注册。
在浏览器上传递 http://localhost:8080/v1/data/hello world
。路由将捕获定义的 url 之后的任何参数。同时在处理程序请求结构中打印捕获的 url 路径,以查看请求的 url 是什么:
fmt.Println(r.URL.Path)
uriP := mux.Vars(r)
param := uriP["param"]
您应该添加正则表达式,因为默认的正则表达式一直匹配到 /
或 ?
符号。
router.Handle("/v1/data/{param:.*}", handler)
我使用 gorilla/mux 进行以下路由映射:
router.Handle("/v1/data/{param}", handler)
当我调用 curl http://localhost:8080/v1/data/hello%2Fworld
时,我得到 404
响应代码。问题是,在我的微服务中,我想将 /v1/data/
之后的所有内容解释为 param
。
捕获参数的代码如下:
uriP := mux.Vars(r)
param := uriP["param"]
是否可以使用 gorilla/mux 或任何其他路由器实现此目的?
针对您的问题:
Is it possible to achieve this using gorilla/mux or any other router?
是的,可以使用 gorilla/mux。您发布的代码没有任何问题。
错误是 page not found
,这意味着您传递的 url 没有在 mux 路由器上注册。
在浏览器上传递 http://localhost:8080/v1/data/hello world
。路由将捕获定义的 url 之后的任何参数。同时在处理程序请求结构中打印捕获的 url 路径,以查看请求的 url 是什么:
fmt.Println(r.URL.Path)
uriP := mux.Vars(r)
param := uriP["param"]
您应该添加正则表达式,因为默认的正则表达式一直匹配到 /
或 ?
符号。
router.Handle("/v1/data/{param:.*}", handler)