如何将HttpResponseMessage的内容读取为文本

79

我正在使用HttpResponseMessage类作为AJAX调用的响应,该调用从服务返回JSON数据。当从服务返回AJAX调用后暂停执行时,我发现此类包含一个Content属性,其类型为System.Net.Http.StreamContent。

如果我在浏览器中检查,我可以看到成功进行了网络调用,并且JSON数据作为响应。我只是想知道为什么我无法从Visual Studio中看到返回的JSON文本?我在整个System.Net.Http.StreamContent对象中搜索,但没有找到任何数据。

public async Task<HttpResponseMessage> Send(HttpRequestMessage request) {
    var response = await this.HttpClient.SendAsync(request);
    return response;
}

1
也许你想展示一下你的代码? - Yuval Itzchakov
1
你想要做什么?检查“response”变量吗? - Yuval Itzchakov
是的,我期望在 Chrome 网络面板中显示的 JSON 数据也会作为响应内容出现在响应对象中。 - PythonIsGreat
2
打开您的立即窗口并编写 response.Content.ReadAsStringAsync().Result。如果您的返回类型是 JSON,则应在那里看到它。 - Yuval Itzchakov
非常感谢,这个可行。 - PythonIsGreat
1
不客气,很高兴能帮上忙。 - Yuval Itzchakov
3个回答

122
响应的文本表示形式被隐藏在HttpResponseMessage类的Content属性中。具体来说,您可以像这样获取响应:

response.Content.ReadAsStringAsync();

和所有现代的异步方法一样,ReadAsStringAsync 返回一个Task。要直接获取结果,请使用任务的Result属性:

response.Content.ReadAsStringAsync().Result;

请注意,Result是阻塞的。你也可以使用await ReadAsStringAsync()

29
你可以在Content上使用ReadAsStringAsync
var response = await client.SendAsync(request);
var content = await response.Content.ReadAsStringAsync();

请注意,通常应该使用await而不是.Result


9
你可以使用ReadAsStringAsync()方法。
var result = await response.Content.ReadAsStringAsync();

我们需要使用await,因为我们正在使用返回任务的ReadAsStringAsync()。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接