我有以下路由器: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/。然后,您必须在处理程序中解析路径的剩余部分,但您可以按照您想要的方式处理“/”。
- 1 回答
- 0 关注
- 75 浏览
添加回答
举报
0/150
提交
取消