如何在GO中传递包含斜杠的URL作为路径参数?

时间:2016-11-09 07:47:07

标签: go

我想发送一个网址,例如" Documents / folder1 / folder2 / file.txt"或者它可以有更少的斜杠,例如" Documents / folder1 / file.txt",我想将此url作为路径参数传递,例如router.HandleFunc("/myproject/v1/image/{url}", GetImage)

但在执行此操作时,它会转到ex:/myproject/v1/image/Documents/folder1/file.txt的url,但它找不到它,因此返回404.

我正在使用gorilla mux:

func main(){
   router := mux.NewRouter().StrictSlash(true)
   router.HandleFunc("/myproject/v1/image/{url}", GetImage)
}

我认为这是严格的,但是当我把它设置为假时,我仍然会得到404

1 个答案:

答案 0 :(得分:0)

StrictSlashes与单个尾部斜杠有关,而不是与参数内部是否匹配斜杠(它们不匹配)有关。您需要使用PathPrefix

const (
    imagesPrefix = "/myproject/v1/image/"  // note no {url}
)

func main() {
    router := mux.NewRouter()

    router.PathPrefix(imagesPrefix).Handler(
        http.StripPrefix(imagesPrefix, GetHandler),
    )
}

func GetImage (w http.ResponseWriter, r *http.Request) {
    // r.URL.Path should contain the image path.
}