【发布时间】:2015-10-30 11:00:17
【问题描述】:
HttpClient 的所有方法,即GetAsync、PostAsync 等是否在内部调用SendAsync 方法?
【问题讨论】:
-
这听起来像是 XY 问题。为什么要问?
标签: asp.net asp.net-web-api httpclient sendasync getasync
HttpClient 的所有方法,即GetAsync、PostAsync 等是否在内部调用SendAsync 方法?
【问题讨论】:
标签: asp.net asp.net-web-api httpclient sendasync getasync
是的,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/");
...
}
【讨论】: