问题标签 [ihttpclientfactory]

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 投票
0 回答
31 浏览

api - 使用具有 HttpClient 依赖项的服务对 API 运行集成测试 - CustomWebApplicationFactory

我一直试图让集成测试适用于我的 dotnetcore3.1 API,但没有成功。我了解,出于集成测试的目的,可以使用自定义 Web 应用程序工厂并简单地从中创建一个客户端来调用 api 端点。完成了,我有这个并且效果很好。

我的问题是我必须通过一个 NSwag 客户端来执行此操作,该客户端处理身份验证并负责 http 客户端的所有配置。

因此,我需要获取已在 Web 应用程序工厂 (webhostbuilder) 阶段注入的我的 nswag 客户端服务,但我认为我需要使用它而不是 factory.CreateClient()。

我认为,因为我没有调用 CreateClient,所以这是出现错误的原因 - 在我期望在测试中对请求做出响应的时候,“无法建立连接目标机器主动拒绝它” 。

那么当这个依赖的实现被隐藏在你希望使用的 Nswag 服务中时,如何使用 factory.createclient 呢?

我完全错过了什么吗?

0 投票
1 回答
198 浏览

c# - 当请求的命名客户端未定义时,使 ASP.NET 核心 IHttpClientFactory 抛出

我正在使用 ASP.NET 核心 3.1,并且正在编写一个 Web api,从 Visual Studio 2019 内置的 ASP.NET 核心 Web api 模板开始。

我的一项服务依赖于该IHttpClientFactory服务。我正在使用命名的客户端消费模式。所以,基本上,我有这样的代码:

我注意到即使使用不存在的 HTTP 客户端的名称,前面的方法调用也能正常工作。不存在的 HTTP 客户端是指从未在方法内部定义的命名 HTTP 客户端Startup.ConfigureServices

换句话说,我希望下面的代码会抛出,但实际上它不会:

是否可以配置一个 ASP.NET 核心 3.1 应用程序,使其IHttpClientFactory具有严格的行为,并且像前一个一样的代码会引发异常,说明请求的命名客户端未定义?

0 投票
2 回答
112 浏览

c# - 对新 ihttpfactory 中 httpclient 的生命周期感到困惑

从规范为单例的代码重构为httpclient新的代码,ihttpfactory我对以下代码的生命周期感到非常困惑httpClient

The typed client is registered as transient with DI. [打字客户]

这意味着我以前依赖的所有单例服务httpclient现在都将效仿[即暂时的]。我找不到有关此设计选择的支持文档?由于我们必须使所有依赖图瞬态化,现在这不会对性能造成伤害吗?

0 投票
0 回答
25 浏览

c# - 如何使用 HttpClient 和 Task.WhenAll 避免 ThrowAddingDuplicateWithKeyArgumentException

所以,我写了一个类来实现 IdentityServer4 的授权。该类期望HttpClient,IHttpContextAccessor用于访问当前标题和一些设置。

在调用 sub-api 之前,我让它请求一个具有必要范围的新令牌。如果没有错误,它会调用:

Startup.cs使用此委托授予类的 api 中,我有:

这实现了IHttpClientFactoryDelegationAuthServiceClient提供HttpClient.

这一切都很好,直到我尝试Task.WhenAll在重负载下使用多个委托调用。然后,我开始看到:

SetBearerToken线。我认为发生这种情况是因为一个委托调用未完成,而另一个正在尝试设置令牌,并且标头中已经存在“Bearer”。

我读过一些文章,讨论为什么HttpClient每次通话都 new up an 不好,而拥有一个 singleton 也不好HttpClient。我认为IHttpClientFactory创建它是为了在必要时处理更新。但是,它看起来并不这样做。

除了不使用之外,避免此错误的建议或正确方法是Task.WhenAll什么?

0 投票
1 回答
153 浏览

c# - 如何为每个 url 使用 Polly 和 IHttpClientFactory

我正在尝试找到一种方法来使用using HttpClientwhere IHttpClientFactory.CreateClient([name])[name] 是在 Startup 类中使用. 我希望该策略适用于我使用该客户端进行调用的每个 url。HttpClientPollyPolicyRegistry

因此,如果我创建一个名为“myclient”的客户端,并且在整个应用程序中,我将使用该命名客户端调用 N 个不同的 url,我希望将策略单独应用于每个 url,而不是作为一个整体。

启动

一些消费者服务

在上述情况下,我希望为我正在调用的每个 url 单独采用启动类中设置的策略。

那可能吗 ?

0 投票
0 回答
70 浏览

c# - 如何在运行时使用 Polly 策略注册 HttpClient?

我希望在运行时能够HttpClient通过IHttpClientFactory给定的Polly策略在运行时注册。是否有可能以某种方式改变IServiceCollection?

我知道IServiceCollection是一个仅用于初始化的容器,之后服务应该用 解决IServiceProvider,但我需要HttpClient在运行时根据给定的参数添加新的(s):

注册服务

消费者

0 投票
0 回答
69 浏览

c# - 使用关联的 DelegatingHandler 处理 HttpClient

您好,我正在使用IHttpClientFactorywithDI来创建 附加HttpClient了自定义的实例。DelegatingHandler这些处理程序包含应处置的资源。就我而言,它们包含一个Pollypolicy 。

使用其委托处理程序处置此类 HttpClient 实例的正确方法是什么?

Http 委托处理程序

HttpClient 创建

0 投票
0 回答
36 浏览

c# - 使用 API_Key 授权的 API 调用(httpclient / IHttpClientFactory)

我想用 API_Key 授权调用第三方 API。请找到我的代码,它返回“StatusCode:401,ReasonPhrase:'未授权',版本:1.1”
我尝试通过 2 方法添加 API 密钥,并且都给出了上述响应。请指教。