如何将HttpResponseMessage内容作为文本阅读

Pyt*_*eat 28 c# json asp.net-web-api

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

如果我在浏览器中检查,我看到网络调用成功,JSON数据作为响应.我只是想知道为什么我在Visual Studio中看不到返回的JSON文本?我搜遍了整个System.Net.Http.StreamContent对象,看不到任何数据.

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

Bar*_*rop 53

响应的文本表示隐藏在类的Content属性中HttpResponseMessage.具体来说,你得到这样的回应:

response.Content.ReadAsStringAsync();

像所有现代Async方法一样,ReadAsStringAsync返回一个Task.要直接获得结果,请使用Result任务的属性:

response.Content.ReadAsStringAsync().Result;

请注意Result是阻止.你也可以await ReadAsStringAsync().

  • 这将返回一个`Task <string>`.你需要`await`来查看实际的字符串结果. (3认同)

Nir*_*edi 9

你可以使用 ReadAsStringAsync() 方法

var result = await response.Content.ReadAsStringAsync();
Run Code Online (Sandbox Code Playgroud)

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


Tim*_*lds 6

您可以使用ReadAsStringAsyncContent.

var response = await client.SendAsync(request);
var content = await response.Content.ReadAsStringAsync();
Run Code Online (Sandbox Code Playgroud)

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