为了账号安全,请及时绑定邮箱和手机立即绑定

go/mux 中第一次匹配后停止匹配

go/mux 中第一次匹配后停止匹配

Go
海绵宝宝撒 2023-07-17 16:52:05
我有以下路由器:func testHttp() {    r := mux.NewRouter()    s := r.PathPrefix("/cmd").Subrouter()    s.HandleFunc("/{cmd}", cmd)    http.Handle("/", r)    http.ListenAndServe(":8090", nil)}当我发出这样的请求时,localhost:8090/cmd/ls -lacmd 处理程序会正确执行。但是,如果我传递类似的内容,localhost:8090/cmd/ls -la /home/foo我会得到 404。这意味着 gorilla/mux 在检测到 / 时保持匹配。那么如何配置它,以便特定匹配路径(在本例中为 /cmd/)之后的所有内容都被视为该路径的参数?想必我只能求助于使用 GET 参数,但是如果也使用 /rest-endpoint/params-having/ 也可以实现这一点吗?
查看完整描述

1 回答

?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

/ 是 URL 的目录分隔符,因此 mux 所做的事情是正确的,它分隔和匹配由 / 分隔的段。如果要ls -la /home/foo作为路径参数传递,则应转义 / 字符,并写入 %2F。然后 mux 将正确运行。

另一种选择是将处理程序安装到 PathPrefix /cmd/。然后,您必须在处理程序中解析路径的剩余部分,但您可以按照您想要的方式处理“/”。


查看完整回答
反对 回复 2023-07-17
  • 1 回答
  • 0 关注
  • 82 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信