有没有办法在Siesta中提供GET请求,同时提供参数,例如http://example.com/api/list.json?myparam=1?
我试过
myAPI.resource("list.json?myparam=1")
但是问号会被转义。
然后我尝试了
myAPI.resource("list.json").request(.GET, urlEncoded:["myparam": "1"])
但它总是因“网络连接丢失”而失败,但所有其他请求都成功,因此消息错误。
答案 0 :(得分:11)
您正在寻找withParam
:
myAPI.resource("list.json").withParam("myparam", "1")
您尝试在第一个示例中使用的Service.resource(_:)
方法特别避免将特殊字符解释为params(或除路径之外的任何内容)。来自文档:
path参数只是附加到baseURL的路径,永远不会被解释为URL。诸如..,//,?和https之类的字符串没有特殊含义;它们会直接进入生成的资源路径,并在必要时进行转义。
这是一项安全功能,旨在防止用户提交的字符串流入URL的其他部分。
第二个示例中的Resource.request(_:urlEncoded:)
方法用于在请求正文中传递参数(即使用POST或PUT),而不是查询字符串中的参数。
请注意,如果您想绕过Siesta的URL组件隔离和转义功能,您可以自己使用Service.resource(absoluteURL:)自行构建URL。