这种情况:
他们是Servoy中的外部Web 服务,我想在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可用于从媒体类型为“文本/纯文本”的内容中读取“字符串”类型的对象。
如果我打开Fiddler并运行相同的URL,则可以看到正确的数据,但是content-type是text / plain。但是我在Fiddler中也看到了我想要的JSON …
可以在客户端解决此问题还是Servoy网络服务?
更新: 使用HttpWebRequest而不是HttpResponseMessage并使用StreamReader读取响应…
尝试改用ReadAsStringAsync()。
var foo = resp.Content.ReadAsStringAsync().Result;
为什么它的原因ReadAsAsync<string>()不工作是因为ReadAsAsync<>将尝试使用默认的一个MediaTypeFormatter(即JsonMediaTypeFormatter,XmlMediaTypeFormatter…)读取与内容content- type的text/plain。然而,没有默认格式化可以读取text/plain(他们只能读application/json,application/xml等等)。
ReadAsAsync<string>()
ReadAsAsync<>
MediaTypeFormatter
JsonMediaTypeFormatter
XmlMediaTypeFormatter
content- type
text/plain
application/json
application/xml
通过使用ReadAsStringAsync(),无论内容类型如何,内容都将被读取为字符串。
ReadAsStringAsync()