Я создал множество серверных REST-сервисов и множество мобильных клиентских приложений, чтобы получить к ним доступ и бесчисленное количество раз сталкивался с подобными проблемами. Так что я знаю вашу боль, и я решил эти проблемы с помощью собственного набора инструментов (мне нравится Fiddler для Windows и Charles для Mac) и узнал много причин неудач.
Первое наблюдение:
Без полной информации о работающей паре запрос-ответ и неудачной паре запрос-ответ найти официальное решение невозможно. Но я почти уверен, что если бы вы их предоставили, официальное решение было бы простым.
Тестирование
Чтобы проверить вашу проблему, я установил клиент REST в Firefox и настроил новый сервис на моей машине разработки. Кроме того, я использовал Charles Proxy в OS X с функцией редактирования запроса для настройки необработанного запроса.
Я перепроверил это в клиенте REST в своем браузере Mozilla, используя «application/json» для типа контента в разделе заголовка, и я увидел правильный ответ.
Странно, что вы говорите, что это сработало. Я попробовал это, и сервер не смог проанализировать значения тела. Серверная платформа, которую я использую, не ASP.NET, но я просто придерживаюсь стандартного ожидаемого поведения любой платформы. Возможно, ваш REST-клиент на самом деле не отправлял заголовок. Интересно, переключили ли вы заголовок на какое-то произвольное значение, например application/notjson
, и посмотрите, работает ли он до сих пор (тогда я бы предположил, что это переопределение клиента REST).
Вероятная причина
Как указано в приведенной выше цитате, вы создаете впечатление, что хотите получить application/json
в заголовке ответа Content-Type
, и кажется, что вы думаете, что должны отправить заголовок Content-Type
в запросе, чтобы соответствовать этому ответу. Это не должно быть необходимым. Сервер должен иметь возможность получать ваш запрос в стандартном формате application/x-www-form-urlencoded
, типичном для серверов, и отвечать в формате JSON так, как вы ожидаете.
Обычно веб-серверы не естественным образом принимают json в качестве формата тела запроса, и аналогичным образом они обычно не получают входящий запрос Content-Type приложения/json. Но я видел случаи, когда они это делали.
В любом случае отправка запроса с конфликтующими форматами Content-Type и body определенно является неудачной настройкой.
Я обнаружил, что мой тест сервера отвечает с помощью JSON, используя ваше тело &email=***@***.com&deviceCode=*****&password_value=***
, после переключения заголовка на application/x-www-form-urlencoded
, application/json. Типичная доброта.
Код
Попробуйте закомментировать следующую строку:
[requestOnlineStart setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
или изменить его на:
[requestOnlineStart setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
person
Tom Pace
schedule
26.04.2014
ASP.net API
непосредственно из браузера и посмотрите, возвращает ли он ДЕЙСТВИТЕЛЬНЫЙ ответ json. Если да, то проверьте свой закодированный запрос. проверьте этот аналогичный пост: stackoverflow.com/a/7981511/602257 - person Malloc   schedule 26.04.2014