62

I'm using HttpResponseMessage class as a response from an AJAX call which is returning JSON data from a service. When I pause execution after the AJAX call comes back from the service, I see this class contains a Content property which is of type System.Net.Http.StreamContent.

If I inspect in the browser I see the network call being made successfully and the JSON data as the response. I'm just wondering why I cannot see the returned JSON text from within Visual Studio? I searched throughout this System.Net.Http.StreamContent object and see no data.

public async Task<HttpResponseMessage> Send(HttpRequestMessage request) {
    var response = await this.HttpClient.SendAsync(request);
    return response;
}
PythonIsGreat
  • 6,779
  • 6
  • 20
  • 26

3 Answers3

99

The textual representation of the response is hidden in the Content property of the HttpResponseMessage class. Specifically, you get the response like this:

response.Content.ReadAsStringAsync();

Like all modern Async methods, ReadAsStringAsync returns a Task. To get the result directly, use the Result property of the task:

response.Content.ReadAsStringAsync().Result;

Note that Result is blocking. You can also await ReadAsStringAsync().

Bart van Nierop
  • 3,850
  • 1
  • 26
  • 32
21

You can use ReadAsStringAsync on the Content.

var response = await client.SendAsync(request);
var content = await response.Content.ReadAsStringAsync();

Note that you usually should be using await - not .Result.

Timothy Shields
  • 70,640
  • 17
  • 114
  • 164
7

You can you ReadAsStringAsync() method

var result = await response.Content.ReadAsStringAsync();

We need to use await because we are using ReadAsStringAsync() which return task.

Niraj Trivedi
  • 1,794
  • 16
  • 22