如何使用选项模式来配置 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

Airflow 中文文档:使用测试模式配置

如何在 dotnet core 中为 HttpClient 指定 HTTP/2“先验知识”模式?

如何使用 dotnet(nuget 包)httpclient 配置 TCP 连接数?