如何通过AFNetworking创build简单的Http请求

我仍然使用ASIHTTPRequest,我正在寻找转移到AFNetworking我也经历了Raywenderlich速成class但它没有使用AFNetworking 2.0

我刚刚在AFNetworking中提到的下面的示例中尝试过,但是它不工作。

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; //manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"]; NSDictionary *parameters = @{@"UserId": @"24",@"ArticleId":@"0"}; NSLog(@"%@",parameters); [manager POST:@"http://mysite.com/api/User/showArticleList" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"JSON: %@", responseObject); }failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"Error: %@", error); }]; 

debugging区域显示:

错误域= NSCocoaErrorDomain代码= 3840
“(cocoa错误3840.)”(JSON文本没有开始与数组或对象和选项,以允许片段没有设置。)UserInfo = 0xa0ba580 {NSDebugDescription = JSON文本没有开始数组或对象和允许片段不能设置的选项。}

但是当我使用链接提到的Raywenderlich速成class

  [manager POST:@"http://www.raywenderlich.com/downloads/weather_sample/weather.php?format=json" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"JSON: %@", responseObject); }failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"Error: %@", error); }]; 

它给了我完美的JSON输出,为什么呢?

我终于find了如下解决scheme –

  AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; NSDictionary *parameters = @{@"UserId": @"24",@"Name":@"Robin"}; NSLog(@"%@",parameters); parameters = nil; // if you want to sent parameters you can use above code manager.requestSerializer = [AFJSONRequestSerializer serializer]; [manager POST:@"http://maps.google.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&sensor=false" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"JSON: %@", responseObject); }failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"Error: %@", error); }]; 

对于文本/ Html +如果它没有提供正确的JSONstring,你可以从string中删除它,并将其转换为数组或字典。

  AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; // if you want to sent parameters you can use above code manager.responseSerializer.acceptableContentTypes = [manager.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"]; // header("Content-Type: application/json"); // manager.requestSerializer = [AFJSONRequestSerializer serializer]; manager.responseSerializer = [AFHTTPResponseSerializer serializer]; [manager GET:@"your url" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"responseObject %@",responseObject); NSString *jsonString = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]; NSString *newJsonString = [jsonString stringByReplacingOccurrencesOfString:@"\\'" withString:@""]; /* NSRange range = [jsonString rangeOfString:@"}" options:NSBackwardsSearch]; jsonString = [jsonString substringToIndex:range.location + 1]; */ NSData *data = [newJsonString dataUsingEncoding:NSUTF8StringEncoding]; NSError *error; NSArray *array = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error]; NSLog(@"array %@",array); if (!array) { NSLog(@"Parsing JSON failed: %@", error); } /* NSData *newJSONData = [newJsonString dataUsingEncoding:NSUTF8StringEncoding]; NSDictionary* json = [NSJSONSerialization JSONObjectWithData:newJSONData options:NSJSONReadingMutableContainers error:&error]; NSLog(@"json %@",json); */ NSLog(@"responseObject = %@", [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"%@",[error description]); }]; 

在某些情况下,您需要更改响应字典/数组 – 但有时候对象的所有片段都不可变。
为了做到这一点,做如下。

为词典

  NSError *error; NSData *dataFromDict = [NSJSONSerialization dataWithJSONObject:responce options:NSJSONWritingPrettyPrinted error:&error]; responseDictionary = [[NSMutableDictionary alloc]init]; responseDictionary = [NSJSONSerialization JSONObjectWithData:dataFromDict options:NSJSONReadingMutableContainers error:&error]; 

对于数组

 NSError *error; NSData *dataFromDict = [NSJSONSerialization dataWithJSONObject:responce options:NSJSONWritingPrettyPrinted error:&error]; responseArray = [[NSMutableDictionary alloc]init]; responseArray = [NSJSONSerialization JSONObjectWithData:dataFromDict options:NSJSONReadingMutableContainers error:&error]; 

您好像在服务器端有一个ASP.NET Web API服务。 它默认返回XML。

你有两个select:

  1. 如下所示更改Web服务的configuration如何让ASP.NET Web API使用Chrome返回JSON而不是XML?

  2. 发送HTTP头Accept: application/json以及您的请求。