【发布时间】:2016-11-05 13:05:08
【问题描述】:
我有一个旧代码库,我正试图从中迁移出来。网络调用当前使用 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 工作正常。
任何建议表示赞赏。
【问题讨论】:
-
@EricAya 忘记在问题中写了。更新。不过我已经把它写在我的项目代码中了。
-
那我看不出有什么问题。除了可能之外,尝试像这样声明参数的类型:
let params: [String: Any] =它可能会有所帮助。 -
也可以尝试用
[]替换.prettyPrinted,有些服务器不喜欢在httpBody中有漂亮的JSON。 -
将
.prettyPrinted替换为[],但没有骰子:( -
而
[String: Any]也不起作用?那我就不知道了。我希望其他人能够帮助你。祝你好运! :)
标签: swift httprequest alamofire