Alamofire处理特殊字符参数

问题描述 投票:0回答:1

我为api获得的ServiceKey与复杂的字符混合,如D%2FFgugDIl1le9xiY7be1ge%2B0Q%3D%3D

当我把密钥放在alamofire的params并使用.get关键字时,我的密钥转换,当url实际创建时,它就变成了一个完全不同的密钥。

有什么方法可以解决这个问题吗?

这是我正在使用的代码

Alamofire.request(BusURL, method: .get, parameters: ["cityCode": 25, "routeId":"DJB30300052ND", "ServiceKey": key])
        .responseString { response in
            print(" - API url: \(String(describing: response.request!))")   // original url request
            var statusCode = response.response?.statusCode

            switch response.result {
            case .success:
                print("status code is: \(String(describing: statusCode))")
                if let string = response.result.value {
                    print("XML: \(string)")
                }
            case .failure(let error):
                statusCode = error._code // statusCode private
                print("status code is: \(String(describing: statusCode))")
                print(error)
            }
    }
swift url utf-8 alamofire
1个回答
0
投票

试试以下:

let params = ["cityCode": "25", "routeId":"DJB30300052ND"]
        var urlParams = params.flatMap({ (key, value) -> String in
            return "\(key)=\(value)"
        }).joined(separator: "&")

        let key = "&ServiceKey=D%2FFgugDIl1le9xiY7be1ge%2B0Q%3D%3D"
        urlParams.append(key)

        let url = "https://google.com?\(urlParams)"
        print("url\(url)")
        Alamofire.request(url, method: .get).validate().responseString(completionHandler: {response in
            switch response.result{
            case .success:
                let s = response.result.value ?? "Empty Result"
                print("response \(s)")
            case .failure:
                print("Call Failed")
                debugPrint(response)
            }
        })

输出:https://google.com?cityCode=25&routeId=DJB30300052ND&ServiceKey=D%2FFgugDIl1le9xiY7be1ge%2B0Q%3D%3D

© www.soinside.com 2019 - 2024. All rights reserved.