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

我有以下路由器:


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/ 也可以实现这一点吗?


海绵宝宝撒
浏览 83回答 1
1回答

潇潇雨雨

/ 是 URL 的目录分隔符,因此 mux 所做的事情是正确的,它分隔和匹配由 / 分隔的段。如果要ls -la /home/foo作为路径参数传递,则应转义 / 字符,并写入 %2F。然后 mux 将正确运行。另一种选择是将处理程序安装到 PathPrefix /cmd/。然后,您必须在处理程序中解析路径的剩余部分,但您可以按照您想要的方式处理“/”。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go