77

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
  • 7,529
  • 7
  • 21
  • 26

3 Answers3

120

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
  • 4,130
  • 2
  • 28
  • 32
28

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
  • 75,459
  • 18
  • 120
  • 173
9

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
  • 2,370
  • 22
  • 24