go - 如何在 GO 中将包含斜杠的 url 作为路径参数传递?

标签 go

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

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

我正在使用 gorilla 复用器:

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

我以为它来自 strictslash,但当我将它设置为 false 时,我仍然收到 404

最佳答案

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.
}

关于go - 如何在 GO 中将包含斜杠的 url 作为路径参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40502111/

相关文章:

session - 让 Revel Controller 返回 cookie

sqlite - GORM 关联 .Create()

go - 解码 JSON 对象并将值映射到 Go 中的结构

go - 循环指针

Golang - TLS 握手错误

Golang二叉搜索树算法翻译

reflection - 使用反射包比较指针值

dictionary - 在 Golang 中将命名类型映射[字符串]字符串转换为普通类型

go - 从 SQL QueryRow 结果动态生成结构字段

Google Datastore 无效 key 错误