swift 如何在Alamofire中发送GET参数?

wj8zmpe1  于 2022-12-17  发布在  Swift
关注(0)|答案(1)|浏览(262)

我实现了一个消息传递服务,它可以像这样在curl中使用:

$ curl -X GET -d "source=9C87A267-41A6-431B-A495-B9A36FE2632A" -d "destination=C65BF57F-91A8-4440-8D6B-1EACCC27542D" localhost:8080/api/messages

source和destination参数是发送方和接收方的用户ID。
现在在Alamofire中,我认为最大的问题是它不接受带有以下参数的GET参数:参数,所以我不得不尝试在URL中对参数进行编码:

extension String {
    func appendingGetParameters(_ parameters: [String: Any]) -> String {
        var separator = "?"
        var result = self
        
        for (key, value) in parameters {
            result += separator + "\(key)=\(value)"
            separator = "&"
        }
        
        return result
    }
}

输出字符串如下所示:
“本地主机:8080/API/消息?源地址= 9 C87 A267 - 41 A6 - 431 B-A495-B 9A 36 FE 2632 A,目标地址= C65 BF 57 F-91 A8 -4440- 8D 6 B-1 EACCC 27542 D”
然后我像平常一样调用这个方法:

AF.request(url, method: .get).responseData { ... }

从Alamofire我得到这个错误:
测试获取全部():失败:捕获错误:“无法读取数据,因为其格式不正确。”
如果我调试我的服务器,我发现它无法读取get参数,我强烈怀疑问题出在Alamofire中而不是服务器端如何发送GET参数。
也许是因为特殊的破折号字符,但我不确定,我上面展示的第一个curl请求成功了,所以我理解这是一个正确编码参数的问题,有人有什么提示吗?

ni65a41a

ni65a41a1#

据我所知,问题可能是URL开头缺少http://
无论哪种方式,Alamofire都可以使用2种方法轻松地对GET参数进行编码。

1.字典

let parameters: [String: Any] = [
    "source": "9C87A267-41A6-431B-A495-B9A36FE2632A",
    "destination": "C65BF57F-91A8-4440-8D6B-1EACCC27542D"
]
AF.request("http://localhost:8080/api/messages", method: .get, parameters: parameters).responseData { ... }

2.可编码

struct GetParams: Encodable {
    let source: String
    let destination: String
}
let parameters = GetParams(
    source: "9C87A267-41A6-431B-A495-B9A36FE2632A",
    destination: "C65BF57F-91A8-4440-8D6B-1EACCC27542D"
)
AF.request("http://localhost:8080/api/messages", method: .get, parameters: parameters).responseData { ... }

相关问题