【问题标题】:Does all methods of HttpClient internally invoke SendAsync method?HttpClient 的所有方法都在内部调用 SendAsync 方法吗?
【发布时间】:2015-10-30 11:00:17
【问题描述】:

HttpClient 的所有方法,即GetAsyncPostAsync 等是否在内部调用SendAsync 方法?

【问题讨论】:

  • 这听起来像是 XY 问题。为什么要问?

标签: asp.net asp.net-web-api httpclient sendasync getasync


【解决方案1】:

是的,HttpClient 在下面使用HttpMessageHandler 来执行所有 HTTP 请求。 HttpMessageHandler 方法 Task<HttpResponseMessage> SendAsync(HttpRequestMessage, CancellationToken)HttpClient 所调用的。

抽象类HttpMessageHandler的默认实现是HttpClientHandler

You can pass in your own HttpMessageHandler implementation to the HttpClient constructor that takes one. 虽然您不太可能需要,但还是有一些应用程序。例如,如果您想记录您的HttpClient 发出的每个请求。你可以为HttpMessageHandler 制作一个LoggingHttpMessageHandler 装饰器。

using (var handler = new HttpClientHandler())
using (var loggingHandler = new LoggingHttpClientHandler(handler, logger))
using (var client = new HttpClient(loggingHandler))
{
    // Logs "GET https://www.google.com/"
    var response = await client.GetAsync("https://www.google.com/");
    ...
}

【讨论】:

  • 这仍然适用于 dotnet core 6 吗?
猜你喜欢
  • 2021-11-04
  • 2013-11-08
  • 2022-11-21
  • 2018-12-18
  • 2021-03-29
  • 2014-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多