将Alamofire调用转换为URLSession

时间:2016-11-05 13:05:09

标签: swift httprequest alamofire

我有一个旧的代码库,我试图迁移出来。网络电话目前使用的是Alamofire 4.0,我尝试使用URLSession。我无法弄清楚出了什么问题,这就是我一直在做的事情。我从我要发布的路线和参数开始:

// route to user creation
let url = ...

let params = ["user": ["first_name": "John", "last_name": "Appleseed", "email": "john@apple.com", "password": "asdfgh"]]

以下是新旧网络电话:

// old network request
Alamofire.request(url, method: .post, parameters: newUser, encoding: JSONEncoding.default).responseJSON { response in
  // ...
}

// new code
var request = URLRequest(url: url)
let jsonData = try! JSONSerialization.data(withJSONObject: params, options: .prettyPrinted)
request.httpBody = jsonData
request.httpMethod = "POST"
let task = URLSession.shared.dataTask(with: request) { data, response, error in
  guard let data = data, error == nil else { return print("error=\(error)") }

  if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 {
    print("status code should be 200, but is \(httpStatus.statusCode)")
    print("response = \(response)")
  }

  let responseString = String(data: data, encoding: .utf8)
  print("responseString = \(responseString)")
}

task.resume()

出于某种原因,我在URLSession尝试中获得了400的状态代码。 Alamofire工作正常。

任何建议表示赞赏。

1 个答案:

答案 0 :(得分:0)

问题是请求未被识别为JSON调用。创建URLRequest

后,请写下以下作业
request.allHTTPHeaderFields = ["Content-Type": "application/json"]