Url转义参数无法正确解析

问题描述 投票:1回答:2

我使用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不工作,但为什么?

UPDATE

路线设置:

var routes = Routes{
    Route{
        "GetAbcByArg",
        strings.ToUpper("Get"),
        "/v1/abc/{arg}",
        GetAbcByArg,
    },
}
go swagger mux
2个回答
0
投票

替换此页面地址中的一个仍然指向此页面:

https://stackoverflow.com/questions/55716545%2Furl-escaped-parameter-not-resolving-properly

所以我想

http://localhost:9090/v1/abc/https%3A%2F%2Fgoogle.com

被视为http://localhost:9090/v1/abc/https%3A//google.com

通过你的路由器,它似乎不允许abc之后的任何一个部分


0
投票

它正在与之合作

router := mux.NewRouter().SkipClean(true).UseEncodedPath()

ref:https://github.com/gorilla/mux/blob/master/mux.go

© www.soinside.com 2019 - 2024. All rights reserved.