如何使用选项模式来配置 HttpClient 的属性?
Posted
技术标签:
【中文标题】如何使用选项模式来配置 HttpClient 的属性?【英文标题】:How do I use the options pattern to configure properties for HttpClient? 【发布时间】:2022-01-18 16:24:22 【问题描述】:我一直在阅读 Microsoft 规定的 options pattern,以允许在应用程序启动时将强类型配置设置为 registered,以后可以将其注入需要访问配置值的服务中。
我的应用程序使用 HttpClient 发出 HTTP 请求,当然,我希望将目标 URI 存储在配置中,因为它们会根据环境(dev/test/etc)而改变。
我听说即使 HttpClient 实现了 IDisposable,我们也不应该将它包装在 using (... 语句中,因为它在处理后等待连接超时时可能会泄漏连接。这导致了一个涉及static property 在应用程序的生命周期内保存 HttpClient 的实例,以避免泄漏。
所以现在我一直在弄清楚如何实例化一个静态的、希望是只读的属性,该属性取决于我将在实例构造函数中接收的配置。听起来我需要一把锁之类的东西,但我不确定最安全的结构方式。
【问题讨论】:
【参考方案1】:微软有introduced IHttpClientFactory 来解决这个问题。
解决上述问题,制作HttpClient实例 易于管理,.NET Core 2.1 引入了 IHttpClientFactory 接口 可用于配置和创建 HttpClient 实例 应用程序通过依赖注入 (DI)。
在连接我的服务时,我通过调用 .AddHttpClient
而不是 .AddTransient
在我的 Azure Functions 应用程序中进行了此设置。这将转发给IHttpClientFactory
,直接使用new
解决HttpClient
的问题。
【讨论】:
以上是关于如何使用选项模式来配置 HttpClient 的属性?的主要内容,如果未能解决你的问题,请参考以下文章
我需要 Android 中 HttpClient 的替代选项来将数据发送到 PHP,因为它不再受支持
Go语言实践模式 - 函数选项模式(Functional Options Pattern)
如何使用 Conscrypt 和 Apache HttpClient 5 来加速 TLS