Web Api 的 PostAsync HttpClient 错误 - System.AggregateException“任务已取消。”
Posted
技术标签:
【中文标题】Web Api 的 PostAsync HttpClient 错误 - System.AggregateException“任务已取消。”【英文标题】:PostAsync HttpClient error with Web Api - System.AggregateException "A task was canceled." 【发布时间】:2013-05-13 08:15:21 【问题描述】:我正在尝试使用来自 Web API 的 System.Net.Http.HttpClient 调用 PostAsync 方法。我收到以下错误:
System.AggregateException "任务已取消。"
任务:
Id = 1,状态 = System.Threading.Tasks.TaskStatus.Canceled,方法 = “null”,结果 = “尚未计算”
代码:
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();
);
我假设 responseTask 会强制方法同步运行?
这是一个 WPF 应用程序,而不是 ASP.NET。
【问题讨论】:
【参考方案1】:我遇到了同样的错误,并追踪到我的 HttpClient 超时。默认超时为 100 秒。我在 HttpClient 的创建中添加了以下内容。
HttpClient httpClient = new HttpClient();
httpClient.Timeout = TimeSpan.FromMinutes(10);
【讨论】:
【参考方案2】:在调试方面,您可以尝试编写扩展方法来获取异常:
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;
【讨论】:
调试技巧就像一个魅力,我检测到我的 AV 软件让我很难使用 https 证书,并且办公网络在 Azure 请求方面有问题!【参考方案3】:不同步,第二个任务也将异步执行,但与第一个任务链接,因此只有在第一个任务执行之后。
似乎是第一个任务 - PostAsync 执行时出错。尝试从AggregateException
捕获 TPL 聚合异常并在内部异常集合中找到更多详细信息
例如here 或订阅TaskScheduler.UnobservedTaskException
并在那里记录你所有的异常
【讨论】:
以上是关于Web Api 的 PostAsync HttpClient 错误 - System.AggregateException“任务已取消。”的主要内容,如果未能解决你的问题,请参考以下文章
Asp.net Web Api HttpClient 强类型 PostAsync
ASP.NET Web API - HttpClient.PostAsync 本地 API 不会进入代码
Web Api 的 PostAsync HttpClient 错误 - System.AggregateException“任务已取消。”
使用 httpClient.postasync 进行 web api 调用 .net core