go - URL 转义参数无法正确解析

标签 go swagger mux

我使用 swagger 生成了一个简单的 gorilla/mux API。 对于我的单个端点 /v1/abc/{arg} 我正在传递一个参数。

因此,像这样的请求:http://localhost:9090/v1/abc/hello 现在只是回显该参数。 以下函数处理请求:

func GetAbcByArg(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "application/json; charset=UTF-8")
    vars := mux.Vars(r)
    arg, _ := url.QueryUnescape(vars["arg"])
    log.Printf("arg %s", arg)
    w.WriteHeader(http.StatusOK)
    fmt.Fprintf(w, "%v\n", arg)
}

到目前为止一切顺利。但是,每当我尝试传递一些特殊字符作为参数时,都会收到 404 错误,并且不会调用处理程序。我虽然可以通过完全转义 URL 字符(rfc3986)来简单地转义参数,但这也不起作用。为什么?如何准备任何字符串以便可以将其传递到单个元素中?

示例:

http://localhost:9090/v1/abc/hello 按预期工作

http://localhost:9090/v1/abc/123/xyz 未按预期工作

http://localhost:9090/v1/abc/a.x 按预期工作

http://localhost:9090/v1/abc/https://google.com 未按预期工作

http://localhost:9090/v1/abc/https%3A%2F%2Fgoogle.com 无法正常工作,但是为什么

更新

路线设置:

var routes = Routes{
    Route{
        "GetAbcByArg",
        strings.ToUpper("Get"),
        "/v1/abc/{arg}",
        GetAbcByArg,
    },
}

最佳答案

它正在与

路由器 := mux.NewRouter().SkipClean(true).UseEncodedPath()

引用:https://github.com/gorilla/mux/blob/master/mux.go

关于go - URL 转义参数无法正确解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55716545/

相关文章:

arrays - 使用双 for 循环合并重叠间隔

swagger - OpenAPI 3 : Use array of objects for requestBody example

oauth - Swagger 中的 Keycloak 集成

Golang mux 路由器处理程序函数参数

Golang函数和函数变量语义

csv - Golang : While processing CSV, 重新格式化单行?

google-cloud-platform - GCP API网关JWT始终返回403

转到 MUX Controller 返回 404

go - 使用 Golang Mux Router 和 http.FileServer 预期的根文件和自定义 404

go - var vs := in Go