Tomzie
Tomzie

Reputation: 1408

C# HttpClient async POST request Task not returning a value

I'm executing an async POST request using a HttpClient in C#/Xamarin:

private async Task<string> ServicePostRequest (string url, string parameters)
    {
        string result = String.Empty;

        using (var client = new HttpClient()) {
            HttpContent content = new StringContent (parameters);
            content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue ("application/x-www-form-urlencoded");
            client.Timeout = new TimeSpan (0, 0, 15);
            using(var response = await client.PostAsync(url, content)){
                using (var responseContent = response.Content) {
                    result = await responseContent.ReadAsStringAsync ();
                    Console.WriteLine (result);
                    return result;
                }
            }
        }
    }

When I execute the following code, the expected result (JSON) is being logged correctly in the terminal:

Task<string> result = ServicePostRequest("http://www.url.com", "parameters");

Now, I would like to get this result into a variable to be able to parse it. However, when I use the following code, no result is being logged at all and the application is frozen:

Task<string> result = ServicePostRequest("http://www.url.com", "parameters");
string myResult = result.Result;

Also when I use the result.Wait() method, the application doesn't respond at all.

Any help would be highly appreciated.

Upvotes: 0

Views: 6237

Answers (1)

Oluwafemi
Oluwafemi

Reputation: 14899

Since ServicePostRequest is an awaitable method, change this:

Task<string> result = ServicePostRequest("http://www.url.com", "parameters");
string myResult = result.Result;

To:

 string result = await ServicePostRequest("http://www.url.com", "parameters");

Side Note: Make sure the calling method is an Asynchronous method.

Upvotes: 1

Related Questions