我试图获得HttpResponseMessage的内容。它应该是:{"message":"Action "不存在!","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
}

当前回答

截至2022-02年的更新答案:

var stream = httpResponseMessage.Content.ReadAsStream();
var ms = new MemoryStream();
stream.CopyTo(ms);
var responseBodyBytes = ms.ToArray();

其他回答

试试这个,你可以创建一个像这样的扩展方法:

    public static string ContentToString(this HttpContent httpContent)
    {
        var readAsStringAsync = httpContent.ReadAsStringAsync();
        return readAsStringAsync.Result;
    }

然后,简单地调用扩展方法:

txtBlock.Text = response.Content.ContentToString();

我希望这对你有帮助;-)

截至2022-02年的更新答案:

var stream = httpResponseMessage.Content.ReadAsStream();
var ms = new MemoryStream();
stream.CopyTo(ms);
var responseBodyBytes = ms.ToArray();

你需要调用GetResponse()。

Stream receiveStream = response.GetResponseStream ();
StreamReader readStream = new StreamReader (receiveStream, Encoding.UTF8);
txtBlock.Text = readStream.ReadToEnd();

我建议的简单答案是:

.Result response.Result.Content.ReadAsStringAsync ()

鲁迪翁斯塔登的回答

txtBlock.Text = await response.Content.ReadAsStringAsync();

但如果你不想让方法异步,你可以使用

txtBlock.Text = response.Content.ReadAsStringAsync();
txtBlock.Text.Wait();

Wait()很重要,因为我们正在进行异步操作,必须等待任务完成后才能继续。