Ios 状态代码应为2xx,但在swift中为400
我有一个登录API并使用URLSession来点击API,但我得到了状态码400,这是我的代码-Ios 状态代码应为2xx,但在swift中为400,ios,swift,Ios,Swift,我有一个登录API并使用URLSession来点击API,但我得到了状态码400,这是我的代码- let deviceType = "IOS" let deviceToken = "654321" @IBAction func onClickLogIn(_ sender: Any) { guard let email = self.emailTf.text else { r
let deviceType = "IOS"
let deviceToken = "654321"
@IBAction func onClickLogIn(_ sender: Any) {
guard let email = self.emailTf.text else {
return
}
guard let password = self.pwdTf.text else {
return
}
let url = URL(string: "http://example/api/login")!
var request = URLRequest(url: url)
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpMethod = "POST"
let parameters: [String: Any] = [
"username": email,
"password": password,
"deviceType" : deviceType,
"deviceToken" : deviceToken
]
request.httpBody = parameters.percentEncoded()
URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data,
let response = response as? HTTPURLResponse,
error == nil else {
print("error", error ?? "Unknown error")
return
}
guard (200 ... 299) ~= response.statusCode else {
print("statusCode should be 2xx, but is \(response.statusCode)")
print("response = \(response)")
return
}
do {
let json = try JSONSerialization.jsonObject(with: data, options: [])
print(json)
} catch {
print(error)
}
let responseString = String(data: data, encoding: .utf8)
print("responseString = \(String(describing: responseString))")
}.resume()
}
当我使用断点并键入PO request.httpBody时,它会在httpBody中显示nil并获取状态代码400。如果我出错,请任何人帮助我设置响应数据库类型: “application/x-www-form-urlencoded”、“多部分/表单数据”、“application/json”、“text/plain”、“text/xml”
向后端开发人员询问API类型,它是来自数据API还是原始Json API。基于此,您必须进行编码 您是为表单数据编写的 下面是带有原始json api实现的post api
let parameters: [String: AnyObject] = [
"IdQuiz" : 102,
"IdUser" : "iosclient",
"User" : "iosclient",
"List": [
[
"IdQuestion" : 5,
"IdProposition": 2,
"Time" : 32
],
[
"IdQuestion" : 4,
"IdProposition": 3,
"Time" : 9
]
] ]
Alamofire.request(.POST, "http://myserver.com", parameters: parameters, encoding: .JSON)
.responseJSON { request, response, JSON, error in
print(response)
print(JSON)
print(error)
}
您已经指定了JSON编码的内容,但似乎并没有在任何地方将内容编码为JSON。
percentEncoded
函数做什么?@Paulw11这里是函数-->扩展字典{func percentEncoded()->数据{return map{key,let-escapedKey=“(key)”中的值。addingpercentencodeding(withAllowedCharacters:.urlQueryValueAllowed)??“let-escapedValue=“(value)”.addingPercentEncoding(使用AllowedCharacters:.urlQueryValueAllowed)??“返回escapedKey+”=“+escapedValue}.joined(分隔符:&”).data(使用:.utf8)}不生成json。后端是否需要json?您没有将参数
转换为json格式。