Нет MediaTypeFormatter доступен для чтения объекта типа "String" из контента с типом мультимедиа "text/plain"
В этой ситуации:
Это внешний веб-сервис в Servoy, и я хочу использовать эту службу в приложении ASP.NET MVC.
С помощью этого кода я пытаюсь получить данные из службы:
HttpResponseMessage resp = client.GetAsync("http://localhost:8080/servoy-service/iTechWebService/axws/shop/_authenticate/mp/112818142456/82cf1988197027955a679467c309274c4b").Result;
resp.EnsureSuccessStatusCode();
var foo = resp.Content.ReadAsAsync<string>().Result;
но когда я запускаю приложение, я получаю следующую ошибку:
Нет MediaTypeFormatter доступен для чтения объекта типа 'String' от содержимого с типом мультимедиа 'text/plain'.
Если я открываю Fiddler и запускаю тот же URL-адрес, я вижу правильные данные, но тип содержимого - текстовый/обычный. Однако я вижу в Fiddler также JSON, которого я хочу...
Возможно ли решить эту проблему на стороне клиента или это веб-сервис Servoy?
Update:
Используется HttpWebRequest вместо HttpResponseMessage и читает ответ с помощью StreamReader...
Ответы
Ответ 1
Вместо этого попробуйте использовать ReadAsStringAsync().
var foo = resp.Content.ReadAsStringAsync().Result;
Причина, по которой он ReadAsAsync<string>()
не работает, состоит в том, что ReadAsAsync<>
будет пытаться использовать один из стандартных MediaTypeFormatter
(т.е. JsonMediaTypeFormatter
, XmlMediaTypeFormatter
,...) для чтения содержимого с content-type
of text/plain
. Однако ни один из форматировщиков по умолчанию не может читать text/plain
(они могут читать только application/json
, application/xml
и т.д.).
Используя ReadAsStringAsync()
, содержимое будет считаться строкой, независимо от типа содержимого.