AFNetworking Ожидаемая ошибка типа содержимого

Я получаю строку json в блоке отказа

NSURL *url = [[NSURL alloc] initWithString:@"http://www.vinipost.com/Services/Update/UpdateService.asmx/GetPropSubType?"]; NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url]; [AFJSONRequestOperation addAcceptableContentTypes:[NSSet setWithObject:@"text/html"]]; AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) { NSLog(@"%@", JSON); } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) { NSLog(@"Request Failed with Error: %@, %@", error, error.userInfo); }]; [operation start]; 

Вывод:

 Request Failed with Error: Error Domain=AFNetworkingErrorDomain Code=-1016 "Expected content type {( "text/json", "text/javascript", "application/json", "text/html" )}, got text/plain" UserInfo=0x71521a0 {NSLocalizedRecoverySuggestion=[{"PropTypId":1,"PropCatId":1,"PropTyp":"Flat/ Condo"}.......** 

Ошибка ясна: веб-служба возвращает неправильный тип содержимого. Тип контента должен быть одним из следующих:

"text / json", "text / javascript", "application / json", "text / html"

Но он возвращается

текст / обычный

Более того, если вы посмотрите на ответ http, он возвращает HTML TAGS внутри него, поэтому AFNetworking не может анализировать.

Если эта страница:

 http://www.vinipost.com/Services/Update/UpdateService.asmx/GetPropSubType? 

находится под вашим контролем, исправляет поведение, удаляя html-теги и изменяя тип содержимого

Вы должны добавить эту строку перед операцией

 [AFJSONRequestOperation addAcceptableContentTypes: [NSSet setWithObject:@"text/plain"]]; 

В AFNetworking вам необходимо создать NSURLRequest с помощью AFHTTPClient (сначала вам нужно создать AFHTTPClient и установить некоторые свойства для этого объекта), как показано ниже

AFHTTPClient *httpClient = [[httpClient alloc] initWithBaseURL:[NSURL URLWithString:@"http://www.vinipost.com/"]];

 [httpClient registerHTTPOperationClass:[AFJSONRequestOperation class]]; [httpClient setDefaultHeader:@"Accept" value:@"application/json"]; httpClient.parameterEncoding = AFJSONParameterEncoding; 

теперь, если это зависит от GET / POST или любого другого запроса типа, вам нужно установить параметр, я считаю его POST-запросом, поэтому установите параметр dict и задайте все необходимые пары значений ключа правильно. Если вам не нужны параметры, вы можете передать параметры как nil

 NSURLRequest *request = [httpClient requestWithMethod:@"POST" path:@"Services/Update/UpdateService.asmx/GetPropSubType?" parameters:params]; AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) { NSLog(@"%@",JSON); } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) { NSLog(@"Error MSG = %@",error); }]; [operation start]; 

надеюсь, что это сработает для вас 🙂

  • Cocoa-Touch - как разобрать локальный файл Json
  • Сериализация вложенной структуры данных подклассов MTLModel для JSON
  • Использование NSJSONSerialization с InputStream
  • Как отображать данные Json в UITableviewCell
  • Как использовать NSJSONSerialization
  • Объект RestKit 0.20 JSON сериализуется как запрос стиля GET в теле POST
  • IOS JSON получает все значения от "JSON Dict"
  • Поддержка родного JSON в iOS?
  • iOS Отправить данные JSON в запросе POST с использованием NSJSONSerialization
  • Ошибка Swift JSON: не удалось передать значение типа «__NSDictionaryM» в «NSArray»
  • Как получить значения из словаря в iOS
  • Давайте будем гением компьютера.