从HttpResponseMessage获取内容/消息
我试图得到HttpResponseMessage的内容。 它应该是: {"message":"Action '' does not exist!","success":false}
,但是我不知道如何从HttpResponseMessage中获取它。
HttpClient httpClient = new HttpClient(); HttpResponseMessage response = await httpClient.GetAsync("http://****?action="); txtBlock.Text = Convert.ToString(response); //wrong!
在这种情况下,txtBlock将有价值:
StatusCode: 200, ReasonPhrase: 'OK', Version: 1.1, Content: System.Net.Http.StreamContent, Headers: { Vary: Accept-Encoding Keep-Alive: timeout=15, max=100 Connection: Keep-Alive Date: Wed, 10 Apr 2013 20:46:37 GMT Server: Apache/2.2.16 Server: (Debian) X-Powered-By: PHP/5.3.3-7+squeeze14 Content-Length: 55 Content-Type: text/html }
你需要调用GetResponse() 。
Stream receiveStream = response.GetResponseStream (); StreamReader readStream = new StreamReader (receiveStream, Encoding.UTF8); txtBlock.Text = readStream.ReadToEnd();
我认为最简单的方法就是把最后一行改成
txtBlock.Text = await response.Content.ReadAsStringAsync(); //right!
这样您就不需要引入任何stream读取器,也不需要任何扩展方法。
试试这个,你可以创build一个像这样的扩展方法:
public static string ContentToString(this HttpContent httpContent) { var readAsStringAsync = httpContent.ReadAsStringAsync(); return readAsStringAsync.Result; }
然后,简单的调用扩展方法:
txtBlock.Text = response.Content.ContentToString();
我希望这可以帮助你;-)
如果你想把它转换成特定的types(例如在testing中),你可以使用ReadAsAsync扩展方法:
object yourTypeInstance = await response.Content.ReadAsAsync(typeof(YourType));
或跟随同步代码:
object yourTypeInstance = response.Content.ReadAsAsync(typeof(YourType)).Result;
更新:还有ReadAsAsync <>的通用选项,它返回特定的types实例,而不是对象声明的:
YourType yourTypeInstance = await response.Content.ReadAsAsync<YourType>();
您可以使用GetStringAsync
方法:
var uri = new Uri("http://yoururlhere"); var response = await client.GetStringAsync(uri);