2017-10-05 3 views
0

Pourquoi après tout le code ci-dessous, après que je fais un po NSKeyedUnarchiver.unarchiveObject(with: (response.request?.httpBody)!) je reçois nil? Et le code de réponse est 400. Et la raison pour laquelle le code de réponse est 400, je crois est à cause des paramètres. Des suggestions pourquoi cela arrive?Mauvais code de statut de demande 400 après la demande

let urlRequest = NSMutableURLRequest(url: url) 
let bodyData = parameters.first!.key + "=" + String(describing: parameters.first!.value) 

urlRequest.bind(to: command!) 
urlRequest.httpBody = bodyData.data(using: .utf8) 
urlRequest.httpMethod = "POST" 
urlRequest.allHTTPHeaderFields = NetworkManager.defaultHeaders() 

return Alamofire.request(urlRequest.copy() as! URLRequest) 

EDIT: Ok, donc je l'ai remplacé quelques lignes et maintenant le code ressemble à ceci et les paramètres ne sont plus nuls:

let urlRequest = NSMutableURLRequest(url: url) 
let dataParameters: Data = NSKeyedArchiver.archivedData(withRootObject: parameters) 

urlRequest.bind(to: command!) 
urlRequest.httpBody = dataParameters 
urlRequest.httpMethod = HTTPMethod.post.rawValue 
urlRequest.allHTTPHeaderFields = NetworkManager.defaultHeaders() 

return Alamofire.request(urlRequest.copy() as! URLRequest) 

Mais même comme ça je reçois un code 400. Donc, après avoir enquêté un peu avec le postier, j'ai trouvé que si je mettais le corps comme ça {"xxxxx": "xxxxxxxxx"} ça marche et j'ai un bon code, mais si j'utilise une clé et une valeur, Comment puis-je faire ce travail?

Répondre

0

J'ai donc trouvé pourquoi j'ai reçu la mauvaise demande et la réponse était vraiment simple. Juste dû utiliser la sérialisation json.

Je viens de remplacer cette

let jsonData = try? JSONSerialization.data(withJSONObject: parameters) 
urlRequest.httpBody = jsonData 

avec Je vais laisser ce ici cette

let dataParameters: Data = NSKeyedArchiver.archivedData(withRootObject: parameters) 
urlRequest.httpBody = dataParameters 

au cas où quelqu'un a comme moi le même problème.