2017-08-24 1 views
1

Je suis en train de se connecter à une API 3ème partie qui nécessite un jeton d'authentification en tant que paramètre de requête à une requête POST avec le corps JSON en utilisant Alamofire 4.Plusieurs types de codage pour la demande dans Alamofire 4

Une question similaire a été demandé ici: Multiple encoding types for Alamofire Request

J'essaie de mettre en œuvre la réponse acceptée en utilisant Alamofire 4 (réponse utilisée Alamofire 3).

Voici ce que je fais:

let url = URL(string: urlString)! 
var urlRequest = URLRequest(url: url) 
urlRequest.httpMethod = "POST" 

let bodyParameters: [String: AnyObject] = [ 
    "inviter": inviterId as AnyObject, 
    "invitee": inviteeId as AnyObject 
] 

let requestWithBody = try Alamofire.JSONEncoding.default.encode(urlRequest, with: bodyParameters) 

let queryParameters: [String: AnyObject] = [ 
    "api_token": tokenString as AnyObject 
] 

var compositeRequest = try Alamofire.URLEncoding.default.encode(urlRequest, with: queryParameters) 
compositeRequest.httpBody = requestWithBody.httpBody 
return compositeRequest 

Le code compile et exécute bien. Cependant, lorsque j'exécute la requête et que j'imprime la réponse à la requête, l'URL de la requête n'inclut pas le paramètre de la requête.

Répondre

0

Cette version de l'original semble fonctionner OK pour moi (AF4/Swift4):

fileprivate func multiEncodedURLRequest(
    method: HTTPMethod, 
    requestURL: URL, 
    parameters: Parameters, 
    bodyParameters: Parameters) -> URLRequest 
{ 
    let request = URLRequest(url: requestURL) 

    do { 
     var urlRequest = try URLEncoding.default.encode(request, with: parameters) 
     var bodyRequest = try JSONEncoding.default.encode(request, with: bodyParameters) 

     urlRequest.httpMethod = method.rawValue 
     urlRequest.httpBody = bodyRequest.httpBody 

     return urlRequest 
    } 
    catch { 
     return request 
    } 
}