En-tête AFHTTPSessionManager

J'essaie de définir un en-tête par défaut pour "Content-Type" en définissant HTTPAdditionalHeaders. Lorsque je regarde l'en-tête de la requête, AFNetworking (v 2.0.3) le modifie. J'ai également essayé de définir l'en-tête par setValue: forHTTPHeaderField: sur requestSerializer, mais sans succès. Qu'est-ce qui me manque?

ACTUALISÉ

NSURL *URL = [NSURL URLWithSsortingng:@"http://example.com/api"]; NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; configuration.HTTPAdditionalHeaders = @{@"Content-Type": @"multipart/form-data"}; AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithBaseURL:URL sessionConfiguration:configuration]; manager.responseSerializer = [AFJSONResponseSerializer serializer]; NSMutableDictionary *params = [[NSMutableDictionary alloc]init]; [params setValue:@"some value" forKey:@"someKey"]; [manager POST:@"search" parameters:params success:^(NSURLSessionDataTask *task, id responseObject) { NSLog(@"success"); } failure:^(NSURLSessionDataTask *task, NSError *error) { NSLog(@"error"); }]; 

Je pense que AFNetworking définir Content-Type automatiquement et vous ne pouvez pas le changer. Pour envoyer des données à l'aide de Multipart / Content-type de type de contenu:

 NSURL *URL = [NSURL URLWithSsortingng:@"http://example.com/api"]; NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithBaseURL:URL sessionConfiguration:configuration]; manager.responseSerializer = [AFJSONResponseSerializer serializer]; NSMutableDictionary *params = [[NSMutableDictionary alloc]init]; [params setValue:@"some value" forKey:@"someKey"]; [manager POST:@"search" parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { //If you need to send image UIImage *image = [UIImage imageNamed:@"my_image.jpg"]; [formData appendPartWithFileData:UIImageJPEGRepresentation(image, 0.5) name:@"Image" fileName:@"my_image.jpg" mimeType:@"image/jpeg"]; } success:^(NSURLSessionDataTask *task, id responseObject) { } failure:^(NSURLSessionDataTask *task, NSError *error) { }]; 

Dans le file AFURLRequestSerialization.m vous pouvez find la propriété suivante:

 @property (readwrite, nonatomic, strong) NSMutableDictionary *mutableHTTPRequestHeaders; 

Maintenant, vous pouvez sous- AFHTTPRequestSerializer (ou AFJSONRequestSerializer ) et append vos en-têtes HTTP souhaités à ce dictionary mutable (n'oubliez pas d'importer le file AFURLRequestSerialization.m dans votre file sérialiseur de requête .m).

Ensuite, il vous suffit de définir la propriété requestSerializer de votre sous-class AFHTTPSessionManager sur un nouvel object de votre nouvelle class de sérialiseur de requête (par exemple, dans la méthode init ) et vous avez terminé. Toutes les requests avec votre gestionnaire de session doivent alors inclure vos en-têtes HTTP.

AFNetworking est livré avec AFJSONRequestSerializer et AFJSONResponseSerializer :

 [manager setRequestSerializer:[[AFJSONRequestSerializer alloc] init]]; [manager setResponseSerializer:[[AFJSONResponseSerializer alloc] init]];