AFHTTPSessionManager头

我试图通过设置HTTPAdditionalHeaders设置“Content-Type”的默认标题。 当我查看请求标题时,AFNetworking(v 2.0.3)将其改回。 我也尝试通过setValue:forHTTPHeaderField在requestSerializer上设置标题,但没有成功。 我错过了什么?

更新

NSURL *URL = [NSURL URLWithString:@"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"); }]; 

我认为AFNetworking会自动设置Content-Type,您不能改变它。 使用Content-Type multipart / form-data发送数据:

 NSURL *URL = [NSURL URLWithString:@"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) { }]; 

AFURLRequestSerialization.m文件中,您可以find以下属性:

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

现在,您可以AFHTTPRequestSerializer (或AFJSONRequestSerializer ),并将所需的HTTP头添加到该可变字典中(不要忘记在请求序列化器.m文件中导入AFURLRequestSerialization.m文件)。

然后,只需将AFHTTPSessionManager子类的requestSerializer属性设置为新请求序列化程序类的新对象(例如在init方法中)即可完成。 所有的会话pipe理器请求都应该包含你的HTTP头。

AFNetworking带有一个AFJSONRequestSerializerAFJSONResponseSerializer

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