HttpClient 在两个构造函数中都需要一个 HttpMessageHandler 参数。
在不创建新的 HttpClient 实例的情况下,有没有简单的方法可以更改处理程序?
HttpClient 在两个构造函数中都需要一个 HttpMessageHandler 参数。
在不创建新的 HttpClient 实例的情况下,有没有简单的方法可以更改处理程序?
据我所知,最好的方法是检查默认的HttpClientFactory源代码,它实际上执行处理程序池等操作。然后创建自己的IHttpClientFactory实现,例如只需以一种方式更改默认实现,以便您可以将HttpClient发送到方法以获取其处理程序作为返回值的引用。当然,由于默认实现的池和过期机制,这只是一个快速想法,可能不是最优的,但默认实现提供了对机制的深入了解。
例如,这使我创建了自己的处理程序类型,允许更改分配的IWebProxy,进行选择性DNS请求,分配DNS和IP覆盖等操作。顺便说一句,依赖于IHttpClientFactory的原则会导致关注点的良好分离。
例如,您可以使用不同的预定义ClientHandler类型和属性进行池化,并仅向GetClient调用添加IOption,其中包含RequestedHandlerType、IHttpClientMessageHandlerOptions等,然后让整个DI机制在幕后完成其可靠的工作。通过实际请求具有在DI容器中定义的选项的处理程序,您将拥有比即时更改更清晰的代码库。