我使用 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()
关于go - URL 转义参数无法正确解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55716545/