无法为休息手动设置查询参数 api(使用 mux)
Unable to set query parameters manually for a rest api (using mux)
我正在使用 mux 实现 Rest api。验证一些参数后,我试图用一些默认值填充缺少的参数,稍后我将通过处理请求的方法处理这些默认值,但是,我注意到手动设置查询参数没有任何效果,除非原始查询是直接更改了,有点老套:
func ValidateParameters(r *http.Request) (bool) {
test := r.URL.Query().Get("test")
// if test is not provided set some default value
if test == "" {
r.URL.Query().Set("test", "Test1") //not working
r.URL.Query().Add("test", "Test2") //not working
r.URL.RawQuery = r.URL.RawQuery + "&Test=Test3" // the only method working
}
// more code
}
处理程序在另一个文件中,所以我希望能够执行 test := r.URL.Query().Get("test")
并获取我在 ValidateParameters
中设置的值,该值由请求处理程序调用,但这不是在职的。
有什么解释吗?有什么办法解决吗?
谢谢。
问题是 r.URL.Query()
解析 url,创建参数映射并 returns 它。这是在每次 .Query()
调用时完成的。
这应该有效:
params := r.URL.Query()
params.Set("key", "value")
r.URL.RawQuery = params.Encode()
我正在使用 mux 实现 Rest api。验证一些参数后,我试图用一些默认值填充缺少的参数,稍后我将通过处理请求的方法处理这些默认值,但是,我注意到手动设置查询参数没有任何效果,除非原始查询是直接更改了,有点老套:
func ValidateParameters(r *http.Request) (bool) {
test := r.URL.Query().Get("test")
// if test is not provided set some default value
if test == "" {
r.URL.Query().Set("test", "Test1") //not working
r.URL.Query().Add("test", "Test2") //not working
r.URL.RawQuery = r.URL.RawQuery + "&Test=Test3" // the only method working
}
// more code
}
处理程序在另一个文件中,所以我希望能够执行 test := r.URL.Query().Get("test")
并获取我在 ValidateParameters
中设置的值,该值由请求处理程序调用,但这不是在职的。
有什么解释吗?有什么办法解决吗?
谢谢。
问题是 r.URL.Query()
解析 url,创建参数映射并 returns 它。这是在每次 .Query()
调用时完成的。
这应该有效:
params := r.URL.Query()
params.Set("key", "value")
r.URL.RawQuery = params.Encode()