所以,我正在尝试使用autorest创建一个rest客户端。生成的代码在构造函数params DelegatingHandler[] handlers
的参数中有一个委派处理程序数组。
我以前从未使用过委派处理程序,也不知道如何注入它们。我该怎么做?
我们使用 .net core 1.1 并使用 Startup.cs 中的 ConfigureServices 方法注入依赖项。
真的很老的问题,但我碰巧知道答案。
- 像这样创建你的 HttpClient:
this.httpHandler = CreatePipeline(handlers);
this.httpClient = new HttpClient(httpHandler);
- CreatePipeline 如下所示:
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 处理(,您可以轻松更新它。