swift - 在 Swift 3 中从 URLSession 迁移到 Alamofire 4.3,编码问题

标签 swift post alamofire

以下内容在 Alamofire 4.3Swift 3 中的等效代码是什么?

let baseUrl = "https://hiddenWebsite.com/api/index_load"
let url = URL(string: baseUrl)
let authObj = ["owner_id": "361900", "auth_key": "f408634ac1e14c08eebce46c34ab9db2", "device": "2", "version": "2.1.16"]
let infoObj = ["case": "feeds", "feeds_call_type": "init", "feed_type": "", "load_next_from": "1"]

let infoJSONData = try! JSONSerialization.data(withJSONObject: infoObj)
let infoStr = "info" + "=" + String(data: infoJSONData, encoding: String.Encoding.utf8)!

let authJSONData = try! JSONSerialization.data(withJSONObject: authObj)
let authStr = "auth" +  "=" + String(data: authJSONData, encoding: String.Encoding.utf8)!

let combinedStr = infoStr  +  "&" + authStr
let reqdat = combinedStr.data(using: String.Encoding.utf8)

var request = URLRequest(url: url!)
request.httpMethod = "POST"
request.httpBody = reqdat
let defaultSession = URLSession.shared
defaultSession.dataTask(
    with: request,
    completionHandler: { data, response, error in
        guard error == nil else {
            print("Error while fetching data: \(error)")
            return
        }
        guard let data = data,
            let json = try? JSONSerialization.jsonObject(
                with: data,
                options: JSONSerialization.ReadingOptions.mutableContainers)
            else {
                print("Nil data received")
                return
        }
        print(json)
}).resume()

我目前正在从 Apple 的 URLSession 迁移到 Alamofire,但停留在这一点上。我认为这与编码参数有关。 这是我失败的尝试。我也尝试过 URLEncoding.httpbody 但没有成功。

    let baseUrl = "https://hiddenWebsite.com/api/index_load"
    let masterParameter = [
        "auth": ["owner_id": "361900",
                 "auth_key": "f408634ac1e14c08eebce46c34ab9db2",
                 "device": "2",
                 "version": "2.1.16"],
        "info": ["case": "feeds",
                 "feeds_call_type": "init",
                 "feed_type": "",
                 "load_next_from": "1"]
    ]
    Alamofire.request(baseUrl, method: .post, parameters: masterParameter, encoding: JSONEncoding.default).responseJSON { (response) in

        print(response)
    }

相当于这个的工作 postman 看起来像 Postman Screenshot

最佳答案

您使用的编码不是有效的 JSON。因此,您不能使用 JSON.default 作为编码类型,因为它会将您的 masterParameter 字典编码为有效的 JSON 字典。

相反,您需要像在第一个示例中所做的那样手动构建 URLRequest 并使用 Alamofire.request(urlRequest) API,或者您可以创建你自己的ParameterEncoding将数据传递到其中,然后对 URLRequest 进行编码。

关于swift - 在 Swift 3 中从 URLSession 迁移到 Alamofire 4.3,编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42340218/

相关文章:

iOS( swift ): Encoding/Decoding Enums

python - 在 Python 中使用请求发出 HTTP POST 请求

asp.net - 从 MVC 4 WebApi 中的 POST 读取 http 内容

swift - 如何在 Swift5 中使用 ObjectMapper 映射 Alamofire 5.2 响应

ios - swift 4 : use func generic type to specify the generic type of another func

swift - 尝试更新将返回 : fatal error: unexpectedly found nil while unwrapping an Optional value 的 do-catch block 中的变量

ios - 是否可以使用 FBSDKShareKit 在 Facebook 上自动分享帖子?

ios - 如何使用Swift 4解决Tableview数据数组 "Out of range values"?

ios - 如何在导航栏内隐藏 UISearchController

javascript - 将 JSON 数据发布到服务器 URL