Publication de JSON en tant que corps d'une requête POST à ​​l'aide de AFHTTPClient

J'essaie de find un moyen, en utilisant AFNetworking, de définir l'en-tête Content-Type à appliquer / json et à POST avec JSON dans le corps. Les methods que je vois dans la documentation (postPath et requestWithMethod) prennent toutes deux un dictionary de parameters, que je suppose être codé dans la syntaxe de formulaire standard. Est-ce que quelqu'un connaît un moyen d'indiquer à AFHTTPClient d'utiliser JSON pour le corps, ou dois-je écrire la requête moi-même?

Je suis allé en avant et vérifié la dernière AFNetworking de leur twig principale . Hors de la boîte, j'ai été en mesure d'get le comportement souhaité. J'ai regardé et il semble que ce soit un changement récent (6 octobre), alors vous pourriez avoir besoin de tirer le dernier.

J'ai écrit le code suivant pour faire une request:

AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithSsortingng:@"http://localhost:8080/"]]; [client postPath:@"hello123" parameters:[NSDictionary dictionaryWithObjectsAndKeys:@"v1", @"k1", @"v2", @"k2", nil] success:^(id object) { NSLog(@"%@", object); } failure:^(NSHTTPURLResponse *response, NSError *error) { NSLog(@"%@", error); }]; [client release]; 

Sous mon proxy, je peux voir la request brute:

 POST /hello123 HTTP/1.1 Host: localhost:8080 Accept-Language: en, fr, de, ja, nl, it, es, pt, pt-PT, da, fi, nb, sv, ko, zh-Hans, zh-Hant, ru, pl, tr, uk, ar, hr, cs, el, he, ro, sk, th, id, ms, en-GB, ca, hu, vi, en-us;q=0.8 User-Agent: info.evanlong.apps.TestSample/1.0 (unknown, iPhone OS 4.3.2, iPhone Simulator, Scale/1.000000) Accept-Encoding: gzip Content-Type: application/json; charset=utf-8 Accept: */* Content-Length: 21 Connection: keep-alive {"k2":"v2","k1":"v1"} 

À partir de la source AFHTTPClient, vous pouvez voir que le encoding JSON est la valeur par défaut basée sur la ligne 170 et la ligne 268 .

Pour moi, json n'était pas l'enencoding par défaut. Vous pouvez le définir manuellement comme l'enencoding par défaut comme ceci:

(en utilisant le code d'Evan)

 AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithSsortingng:@"http://localhost:8080/"]]; [client setParameterEncoding:AFJSONParameterEncoding]; [client postPath:@"hello123" parameters:[NSDictionary dictionaryWithObjectsAndKeys:@"v1", @"k1", @"v2", @"k2", nil] success:^(id object) { NSLog(@"%@", object); } failure:^(NSHTTPURLResponse *response, NSError *error) { NSLog(@"%@", error); }]; [client release]; 

la partie cruciale:

 [client setParameterEncoding:AFJSONParameterEncoding];