无法为 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)的主要内容,如果未能解决你的问题,请参考以下文章

Restful风格接口定义

REST API何时使用查询参数或请求参数?

在 Rest API 中批量更新

多个字段解析器使用不同的查询参数解析相同的 REST API

Salesforce REST API 如何避免在查询参数中泄露敏感数据

设计带有一长串查询参数的 RESTful 查询 API [关闭]