.net-core - HttpClient,似乎很难正确使用
问题描述
只是关于正确用法的另一个问题HttpClient
,因为除非我遗漏了什么,否则我会HttpClient
在 Microsoft Docs 中发现相互矛盾的信息。这两个链接是我困惑的根源:
- https://docs.microsoft.com/en-us/azure/architecture/antipatterns/improper-instantiation/#how-to-fix-the-problem
- https://docs.microsoft.com/en-us/aspnet/core/fundamentals/http-requests?view=aspnetcore-3.1#typed-clients
第一个声明最好的方法是共享单例HttpClient
实例,第二个 AddHttpClient<TypedClient>()
将服务注册为瞬态,更具体地说(从该 URL 复制):
类型化的客户端在 DI 中注册为瞬态的。在上述代码中,
AddHttpClient
注册GitHubService
为临时服务。此注册使用工厂方法来:
- 创建一个
HttpClient
.- 创建一个实例
GitHubService
,将实例传递HttpClient
给它的构造函数。
我一直在使用AddHttpClient<TypedClient>()
并感到安全,但现在我再次感到困惑......更糟糕的是,我发现@rynowak 的这个github 问题评论指出:
如果您正在构建一个计划分发的库,我强烈建议您完全不要依赖
IHttpClientFactory
,并让您的消费者传入一个HttpClient
实例。
为什么这对我很重要?因为,我正在创建一个主要做两件事的库:
- 从令牌服务中检索访问令牌 (
IdentityServer4
) - 使用该令牌访问受保护的资源
我正在遵循上面链接 2中描述的类型化客户端方法:
//from https://github.com/georgekosmidis/IdentityServer4.Contrib.HttpClientService/blob/master/src/IdentityServer4.Contrib.HttpClientService/Extensions/ServiceCollectionExtensions.cs
services.AddHttpClient<IIdentityServerHttpClient, IdentityServerHttpClient>()
.SetHandlerLifetime(TimeSpan.FromMinutes(5));
任何有关基于HttpClient
外观的具体实现的建议或示例都将受到欢迎。
谢谢!
解决方案
推荐阅读
- url - 八度错误:urlwrite:在下载文件时无法打开文件
- node.js - 它可能在docker中使用puppeter和robotjs吗?
- node.js - 为 Atom 开发包时节点模块版本冲突
- ios - 在 SwiftUI 中切换更改后更新数组
- r - 在 ggplot2 中使用来自 Google 的 sysfonts
- ruby-on-rails - AWS 上奇怪的“rails superclass mismatch for class”,而本地 docker 运行良好
- netbeans - Netbeans IDE 已重新配置自身,需要帮助重置为以前的视图
- java - 将字节解码为位图
- json - 在一个 http 调用中发出多个请求 - Google Apps Script .fetch
- javascript - 在 React 功能组件中使用参数化选择器(选择器工厂)和来自 React-Redux 的 useSelector