golang: github/gorilla/mux 支持回归 URL 路径。

huangapple go评论88阅读模式
英文:

golang: github/gorilla/mux supports regression url path

问题

当我想要URL路径正常工作时,带有尾部的斜杠"/",以及不带尾部的斜杠"/"。

mux1      *mux.Router

mux1.Handle("/example/", ...).Methods("GET")

我希望这两个URL都能正常工作:https://host/api/example/ 和 https://host/api/example

但是

mux1.Handle("/example/?", ...).Methods("GET")

不起作用。

英文:

When I want url path works well, with tail "/", and without tail "/"

mux1      *mux.Router

mux1.Handle("/example/", ...).Methods("GET")

I want these 2 urls works both : https://host/api/example/ and https://host/api/example

But

mux1.Handle("/example/?", ...).Methods("GET")

not work.

答案1

得分: 2

当你在Go中使用mux.Handle定义路由时,你指定的路径是精确匹配的。这意味着/example//example是不同的路径,你需要分别为它们定义路由。

一种实现这一点的方法是使用mux.PathPrefix方法匹配所有以/example开头的路径,然后使用mux.StripPrefix/example前缀从URL中移除,然后将其传递给你的处理程序。这是一个示例:

mux := mux.NewRouter()
mux.PathPrefix("/example").Handler(http.StripPrefix("/example", myHandler))

// ...

http.ListenAndServe(":8080", mux)
英文:

When you define a route in Go using mux.Handle, the path you specify is an exact match. This means that /example/ and /example are different paths, and you need to define a route for both of them separately.

One way to achieve this is to use the mux.PathPrefix method to match all paths that start with /example and then use mux.StripPrefix to remove the /example prefix from the URL before passing it to your handler. Here's an example:

mux := mux.NewRouter()
mux.PathPrefix("/example").Handler(http.StripPrefix("/example", myHandler))

// ...

http.ListenAndServe(":8080", mux)

huangapple
  • 本文由 发表于 2023年3月17日 11:17:24
  • 转载请务必保留本文链接:https://go.coder-hub.com/75763471.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定