HttpClient was introduced in .NET 4.5 in order to send HTTP requests.
It is using the new Asynchronous framework in .NET 4.5.

But it has a problem on the web

Async framework, and Async/wait statements will return back immediately to the caller when we use them, and they depend on the caller back to notify the called when they are done.
On a web page, which finish running immediately, we cannot use them

So the following code will never notify back the ASP.Net controller
public async Task ReadStringAsAsync(string url) 
{
    using (var client = new HttpClient()) {
        client.BaseAddress = new Uri(_baseAddress);
        client.DefaultRequestHeaders.Accept.Clear();
        client.DefaultRequestHeaders.Accept.Add(
            new MediaTypeWithQualityHeaderValue("application/json"));
        var task = client.GetStringAsync(url);
        return task;
    }
}
And the reason, GetStringAsync will return to the caller. So, the solution is just simple. Don't return back immediately, and wait for the result to return.
just add the "Result" property at the end of the previous statement.
so the code will be
public async Task< string > ReadStringAsAsync(string url)
{
    using (var client = new HttpClient())
        {
            client.BaseAddress = new Uri(_baseAddress);
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(
                new MediaTypeWithQualityHeaderValue("application/json"));
            var task = client.GetStringAsync(url).Result;
            return task;
         }
}