无法为 rest api 手动设置查询参数(使用 mux)
Posted
技术标签:
【中文标题】无法为 rest api 手动设置查询参数(使用 mux)【英文标题】:Unable to set query parameters manually for a rest api (using mux) 【发布时间】:2018-09-04 16:28:54 【问题描述】:我正在使用 mux 实现一个 Rest api。在验证了一些参数之后,我试图用一些默认值填充缺失的参数,稍后我会通过处理请求的方法处理这些默认值,但是,我注意到手动设置查询参数没有任何效果,除非原始查询是直接的改变了这有点hacky:
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
中设置的值,但这不起作用。
对此有何解释?有什么办法可以解决吗?
谢谢。
【问题讨论】:
net/url.Values.Encode() 有什么问题? 不确定我是否关注?对不起,也许我的问题不够清楚 我希望新的编辑更清晰。简而言之,我想在开始处理请求之前在验证阶段手动添加查询参数,这是在另一个调用ValidateParameters()
的function
中完成的,但它没有任何效果。
不知道为什么这被否决了,它可以帮助某人
【参考方案1】:
问题是r.URL.Query()
解析url,创建参数映射并返回它。每次调用.Query()
都会完成此操作。
这应该可行:
params := r.URL.Query()
params.Set("key", "value")
r.URL.RawQuery = params.Encode()
【讨论】:
以上是关于无法为 rest api 手动设置查询参数(使用 mux)的主要内容,如果未能解决你的问题,请参考以下文章
多个字段解析器使用不同的查询参数解析相同的 REST API