Ios 在swift中使用Alamofire时出现JsonSerialization错误
我正在调用我的注册服务,其中参数正常,url也正确,我得到了状态代码200作为响应,但当我打印结果和响应时,它显示失败。我已经检查了注册所需的一切,一切看起来都很好,但我不明白为什么它的响应显示失败。作为回应,Ios 在swift中使用Alamofire时出现JsonSerialization错误,ios,swift,alamofire,Ios,Swift,Alamofire,我正在调用我的注册服务,其中参数正常,url也正确,我得到了状态代码200作为响应,但当我打印结果和响应时,它显示失败。我已经检查了注册所需的一切,一切看起来都很好,但我不明白为什么它的响应显示失败。作为回应, ["FirstName": "Awais", "Email": "awais@gmail.com", "PhoneNumber": "08965235415", "Password": "123456", "LastName": "Ahmed", "ConfirmPassword": "
["FirstName": "Awais", "Email": "awais@gmail.com", "PhoneNumber": "08965235415", "Password": "123456", "LastName": "Ahmed", "ConfirmPassword": "123456"]
Request: Optional(MyURL)
Response: Optional(<NSHTTPURLResponse: 0x604000438900> { URL: http://api.theahsanzaman.info/api/Account/Register } { Status Code: 200, Headers {
"Cache-Control" = (
"no-cache"
);
"Content-Length" = (
0
);
Date = (
"Tue, 17 Apr 2018 13:37:03 GMT"
);
Expires = (
"-1"
);
Pragma = (
"no-cache"
);
Server = (
"Microsoft-IIS/8.5"
);
"X-AspNet-Version" = (
"4.0.30319"
);
"X-Powered-By" = (
"ASP.NET"
);
"X-Powered-By-Plesk" = (
PleskWin
);
} })
Result: FAILURE
RR FAILURE: responseSerializationFailed(Alamofire.AFError.ResponseSerializationFailureReason.inputDataNilOrZeroLength)
0
1111
"FAILURE: responseSerializationFailed(Alamofire.AFError.ResponseSerializationFailureReason.inputDataNilOrZeroLength)"
我很困惑,如果状态代码是200,为什么它没有显示成功响应
通过添加Validate(statusCode:200)。在调用API时验证响应状态代码。存在许多不同类型的错误。状态200表示错误与网络请求无关。但是
inputDataNilOrZeroLength
非常有意义。内容长度=(0)
。您没有数据,JSONSerialization可能会导致一个错误,然后抛出该错误inputDataNilOrZeroLength
。也许可以事先检查状态代码?我知道这是由于responseJSON导致的,应该转换为responseString。
import SwiftyJSON
import Alamofire
import UIKit
class SignUpService{
static let instance = SignUpService()
var status = 0
func signUpUser(param:[String: String],completion:@escaping CompletionHandler) {
let url = URL.init(string: SignUpUrl)
Alamofire.request(url!, method: .post, parameters: param, encoding:JSONEncoding.default, headers: nil).responseJSON { (response) in
print("Request: \(String(describing: response.request))") // original url request
print("Response: \(String(describing: response.response))") // http url response
print("Result: \(response.result)")// response serialization result
print("RR \(response)")
if response.result.error == nil{
self.status = (response.response?.statusCode)!
if(self.status == 200){
print("successful")
}
completion(true)
print("11112222")
}else{
completion(false)
print("1111")
debugPrint(response.description as Any)
}
}
}
}
Alamofire.request(url!, method: .post, parameters: param, encoding:JSONEncoding.default, headers: nil). validate(statusCode: 200..<300).responseJSON { (response) in
switch response.result {
case .success(let data):
Logs.DLog(object: "\n Success: \(response)")
// Do your code here...
case .failure(let error):
Logs.DLog(object: "\n Failure: \(error.localizedDescription)")
// Do your code here...
}
})