gpt4 book ai didi

ios - 使用 moya 和 alamofire 时参数编码的发布请求错误

转载 作者:行者123 更新时间:2023-11-29 00:15:01 25 4
gpt4 key购买 nike

我使用 moya 发出 post 请求,但是当我发送 post 时,服务器给我一个错误,它无法解码 body 参数。我使用 URLEncoding.default 像这样对参数进行编码

public var parameterEncoding: ParameterEncoding {
return URLEncoding.default
}

它会设置内容类型application/x-www-form-urlencoded,服务器接受的内容类型也是一样的

如果参数是像这样的字典 {"a":"b"} ,那工作正常,但如果字典包含数组或其他字典,服务器无法从请求正文中获取参数。

例如:

{
"a":"xxx",
"b":[
"xxxxx",
"xxxxx"
]
}

alamofire 会这样编码"a"="xxx"&b[]=xxxx&b[]=xxx

但是服务器期望a=xxx&b[0]=xxx&b[1]=xxxx

如何解决这个问题?

最佳答案

您可以手动构建参数字符串,然后将参数字符串链接到Url 字符串。最后,只需通过 Alamofire 使用 url 进行请求,不带任何参数(它们已经在 url 中)。

构造参数串的方式:

    let dict = ["a":"xxx","b":["xxx","xxxxxxx"]] as [String : Any]
var paramString = ""

for key in dict.keys {
let value = dict[key]
if let stringValue = value as? String {
paramString += "&\(key)=\(stringValue)"
}
else if let arr = value as? Array<String> {
for i in 0 ... arr.count - 1 {
paramString += "&\(key)[\(i)]=\(arr[i])"
}
}
else{
//other type?
}
}

if paramString.characters.count > 0 {
paramString = paramString.substring(from: paramString.index(paramString.startIndex, offsetBy: 1))
}

print(paramString)
//output is: b[0]=xxx&b[1]=xxxxxxx&a=xxx

关于ios - 使用 moya 和 alamofire 时参数编码的发布请求错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45482628/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com