问题标签 [httpclientfactory]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
13544 浏览

c# - 如何使用 IHttpClientFactory 刷新令牌

我正在使用 IHttpClientFactory 使用 Net Core 2.2 从两个外部 API 发送请求和接收 HTTP 响应。

我正在寻找一种使用已存储在 appsettings.json 中的刷新令牌来获取新访问令牌的好策略。当前请求返回 403 或 401 错误时需要请求新的访问令牌,当获得新的访问和刷新令牌时,需要将 appsettings.json 更新为新值,以便在后续请求中使用。

我正在使用两个客户端向两个不同的 API 发送请求,但其中只有一个使用令牌身份验证机制。

我已经实现了一些简单的工作,但我正在寻找一种更优雅的解决方案,可以在当前令牌过期时动态更新标头:

我已经在 Startup.ConfigureServices 方法中注册了 IHttpClientFactory,如下所示:

注册后,我将在两种不同的方法中使用它来调用两个不同的 API,第一种方法是:

refresh Token 方法如下所示:

请注意,我正在更新表示配置的 POCO 对象,而不是 appsettings.json,因此新值存储在内存中。我想为后续请求更新 appsettings.json。

如果提出的解决方案需要在 Startup.ConfigureService 中定义 Httpclient 的主要设置,则需要允许创建不同的 HttpClien 实例,因为其中一个 HttpClient 实例(在另一种方法中用于调用第二个 API)没有t 需要令牌来发送请求。

0 投票
3 回答
1793 浏览

asp.net-core - 使用 IHttpClientFactory 使用外部 API 时存储访问和刷新令牌的位置。网络核心

我正在使用 IHttpClientFactory 使用 Net Core 2.2 从我的 Web API 向外部 API 发送请求和接收 HTTP 响应。

用于向 API 发送请求的访问令牌和刷新令牌已存储在 appsettings.json 中。当请求返回 403 或 401 错误时,我会动态获取一个新令牌并将其添加到请求的标头中。

但是如何使用新的访问和刷新令牌更新 appsettings.json 以便将其用于后续请求。

是否有比 appsettings.json 更好的方法来存储访问和刷新令牌?

0 投票
1 回答
881 浏览

c# - 如何在 DelegatingHandler 中读取发送到操作方法 (WebAPI) 的参数

我正在使用 IHttpClientFactory 使用 Net Core 2.2 从外部 API 发送请求和接收 HTTP 响应。

我已经实现了一个 DelegatingHandler 来“拦截”我的 http 请求并添加授权标头(令牌)。如果令牌无效,它会获取一个新令牌并重试一次。

同样,当我第一次获得新令牌时,我会将令牌缓存在内存中以供进一步参考。为了缓存令牌,我创建了一个需要 accountID 和令牌的字典。

我遇到的问题是 DelegatingHandler 是在 Startup.cs 类中注册的,但是当时我没有 accountID,我在 Controller 的 ActionMethod 中将 accountID 作为参数获取。该操作方法是调用 SendAsync 并从 DelegatingHandler 获取令牌的方法,依此类推。

我不知道,在控制器收到请求后,如何将该 accountID 注入 DelegatingHandler。

我正在尝试创建一个 IClientCredentials 接口和该接口的实现,该接口可以在控制器中实例化并注入到 DelegatingHandler 中。

我的代码如下所示:

委托处理程序:

Startup.cs 像这样:

和控制器:

0 投票
0 回答
1013 浏览

c# - 如何使用 .Net Core 2.2 AddHttpClient 将 OAuth 令牌分配给我的 HttpClient?

我正在编写一个 Asp.Net Core 2.2 应用程序,我在其中添加了 HttpClient。

所以,基本上我给自己写了一个扩展,它允许我使用最少的配置进行 AddQuickbooksOnline 身份验证,因为扩展默认会进行许多配置。

在我的应用程序注册并通过身份验证后,我会向经过身份验证的用户显示一个 GetProducts 按钮。

我希望这个按钮调用我的 ProductController。

并且该服务实际上取决于我要在我的服务配置中添加的已配置 HttpClient。

因此,为了调用 QBO WebAPI,我需要将经过身份验证的用户的 OAuth 令牌提供给正在实例化的 HttpClient。

0 投票
1 回答
476 浏览

asp.net-core - 如何同时使用 IHttpClientFactory 和 Typed HttpClient?

我有一个类型化的 HttpClient 和(比方说)另一个使用 IHttpClientFactory 来获取 HttpClient 实例的服务/类。

要注册 IHttpClientFactory,我将其注入为services.AddHttpClient(). 为了注册打字客户,我选择services.AddHttpClient<MyTypedClient>

我的问题是,如果我同时使用这两个用例,你认为会有问题吗?对 HttpMessageHandler 池有影响吗?

谢谢,杰姆。

0 投票
1 回答
1035 浏览

c# - 如何将 httpclienthandler 显式传递给 httpclientfactory?

我想使用HttpClientFactory,但我需要在拨打电话时附加证书目前,我正在使用HttpClient,但不知道如何附加证书。
以下是 httpClient 代码:

那么,如何将上面的 httpClient 转换为 HttpClientFactory 呢?

任何帮助,将不胜感激。

0 投票
1 回答
1988 浏览

asp.net-core - 使用 HttpClientFactory 哪种方式更好?

我正在使用 ASP.NET Core 开发 Web api 服务,我需要执行 http 请求。我读了很多关于 HttpClient 的文章,我知道我必须改用 HttpClientfactory。我将把 http 请求调用封装到我的自定义类中。

我预计会有相对大量的客户请求,我试图了解哪种方式在性能方面更好(附两个例子)?

我更喜欢第二种方式,因为我可以将它用于静态类,但我不确定性能。

0 投票
1 回答
3297 浏览

c# - 向通过 IHttpClientFactory 创建的所有客户端添加处理程序?

有没有办法向 IHttpClientFactory 创建的所有客户端添加处理程序?我知道您可以对指定的客户端执行以下操作:

但我不想使用命名客户端我只想向通过以下方式返回给我的所有客户端添加一个处理程序:

0 投票
1 回答
163 浏览

c# - 如何测试具有私有方法依赖性的公共函数?

我正在尝试测试一个使用 HttpClient 来访问外部 API 的公共方法(方法 A)。这个公共方法调用同一个类的私有方法(方法B)来获取方法A的HttpClient发送请求所需的Access Token。我遇到的问题是我正在创建 HttpClientFactory 接口的模拟以测试方法 A 的响应,但是为了让方法 B 获得令牌,它需要自己的 HttpClient 实例。因此,在 Test 方法中创建的 mock 实例也将被 Method B 使用,并且尝试获取 Access Token 将失败。下面的代码使场景更加清晰。

待测方法(方法A):

测试方法:

私有方法(方法 B):

知道如何测试方法A吗?

0 投票
1 回答
7227 浏览

c# - ConfigureServices 中的 AddHttpContextAccessor 与每个 HttpClient

在 ConfigureServices 方法中添加一次 httpContextAccessor 与为每个配置的 HttpClient 添加 HttpContextAccessor 有什么区别。

我的猜测是认为在第二个版本中,我们有两个单例,一个用于类 TestHttpClient1,另一个用于 TestHttpClient2,但我不明白为什么要这样做,因为我在生产中看到了这段代码。