GET 请求似乎没有正确转换数组参数。
let params: [String: AnyObject] = ["q": ["one", "two"], "target": "en"]
Alamofire.request(.GET, "https://www.googleapis.com/language/translate/v2", parameters: params)
生成网址:
q%5B%5D=一个&q%5B%5D=两个&目标=en
我认为它正在尝试为 POST 案例添加 []。 但在 GET 情况下,它应该是 q=one&q=two
这是预期的行为。 根据 README.md,
由于没有发布关于如何编码集合类型的规范,因此将 [] 附加到数组值的键的约定(foo[]=1&foo[]=2),并在嵌套字典值的方括号中附加键( foo[bar]=baz) [已使用]。
您应该考虑使用 POST 或 PUT 并通过 JSON、XML 或其他明确定义的格式传递值,而不是使用 GET。 这显然需要服务器端的更改。
如果服务器端不受您的控制,您应该考虑手动编码这些参数。
是的,它是 google api 端点,所以它不在我的控制范围内。 google API 不喜欢这种格式。 我可以手动构建它,但我想我会归档它,所以你们都知道。
@JRG-Developer 是正确的——这是预期的行为。 如果您需要提供的选项以外的任何内容,请使用自定义参数编码。