PostAsync HttpClient error with Web Api - System.AggregateException "A task was canceled."

15,157

Solution 1

In terms of debugging you could try writing an extension method to get the exception:

public static HttpResponseMessage PostAsyncSafe(this HttpClient client, string requestUri, string content)
        {
            var requestContent = new StringContent(content, Encoding.UTF8, "application/x-www-form-urlencoded");
            return PerformActionSafe(() => (client.PostAsync(requestUri, requestContent)).Result);
        }

public static HttpResponseMessage PerformActionSafe(Func<HttpResponseMessage> action)
        {
            try
            {
                return action();
            }
            catch (AggregateException aex)
            {
                Exception firstException = null;
                if (aex.InnerExceptions != null && aex.InnerExceptions.Any())
                {
                    firstException = aex.InnerExceptions.First();

                    if (firstException.InnerException != null)
                        firstException = firstException.InnerException;
                }

                var response = new HttpResponseMessage(HttpStatusCode.InternalServerError)
                {
                    Content =
                        new StringContent(firstException != null
                                            ? firstException.ToString()
                                            : "Encountered an AggreggateException without any inner exceptions")
                };

                return response;
            }
        }

Solution 2

I was getting this same error and tracked it down to my HttpClient was timing out. The default timeout is 100 seconds. I added the following to the create of the HttpClient.

HttpClient httpClient = new HttpClient();
httpClient.Timeout = TimeSpan.FromMinutes(10);

Share:
15,157

Related videos on Youtube

pfeds
Author by

pfeds

Updated on June 04, 2022

Comments

  • pfeds
    pfeds almost 2 years

    I'm trying to call PostAsync method using System.Net.Http.HttpClient from the Web API. I get the following error:

    System.AggregateException "A task was canceled."

    Task:

    Id = 1, Status = System.Threading.Tasks.TaskStatus.Canceled, Method = "{null}", Result = "{Not yet computed}"

    Code:

    using (HttpClientHandler handler = new HttpClientHandler())
    {
        handler.Credentials = new NetworkCredential("MyUsername", "p@ssw0rd");
    
        using (HttpClient client = new HttpClient(handler))
        {
            var postData = new List<KeyValuePair<string, string>>();
            postData.Add(new KeyValuePair<string, string>("status", "Hello world"));
    
            HttpContent content = new FormUrlEncodedContent(postData);
    
            var responseTask = client.PostAsync(url, content).ContinueWith(
                (postTask) =>
                {
                    postTask.Result.EnsureSuccessStatusCode();
                });
        }
    

    I assume the responseTask will force the method to run synchronously?

    It's a WPF application, not ASP.NET.

  • Мitke
    Мitke over 4 years
    Debugging trick worked like a charm, I detected my AV software is giving me a hard time with https certificates and office network has a problem with Azure requests!