所以,我正在尝试使用 autorest 创建一个休息客户端。生成的代码在构造函数的参数中有一个 DelegatingHandler 数组params DelegatingHandler[] handlers
。
我以前从未使用过委托处理程序,也不知道如何注入它们。我该怎么做?
我们正在使用 .net core 1.1 并使用 Startup.cs 中的 ConfigureServices 方法注入依赖项。
所以,我正在尝试使用 autorest 创建一个休息客户端。生成的代码在构造函数的参数中有一个 DelegatingHandler 数组params DelegatingHandler[] handlers
。
我以前从未使用过委托处理程序,也不知道如何注入它们。我该怎么做?
我们正在使用 .net core 1.1 并使用 Startup.cs 中的 ConfigureServices 方法注入依赖项。
真的很老的问题,但我碰巧知道答案。
this.httpHandler = CreatePipeline(handlers);
this.httpClient = new HttpClient(httpHandler);
private static HttpMessageHandler CreatePipeline(IEnumerable<HttpMessageHandler> handlers)
{
HttpMessageHandler pipeline = handlers.LastOrDefault() ?? DefaultHandlerFactory();
if (pipeline is DelegatingHandler dHandler && dHandler.InnerHandler == null)
{
dHandler.InnerHandler = DefaultHandlerFactory();
pipeline = dHandler;
}
// Wire handlers up in reverse order
IEnumerable<HttpMessageHandler> reversedHandlers = handlers.Reverse().Skip(1);
foreach (HttpMessageHandler handler in reversedHandlers)
{
dHandler = handler as DelegatingHandler;
if (dHandler == null)
{
throw new ArgumentException($"bad handler", nameof(handlers));
}
dHandler.InnerHandler = pipeline;
pipeline = dHandler;
}
return pipeline;
}
然后,您只需创建一个 HttpClientHandler(由 DefaultHandlerFactory 处理),您可以轻松地对其进行新建。