问题标签 [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 回答
195 浏览

asp.net-core - HTTPClientFactory中释放TCP端口的机制是怎样的?

在我当前版本的项目中,HttpClinet已用于创建请求。但是在请求的高峰期,我们的大部分 TCP 端口都处于等待状态,它们的状态在任务完成后保持大约 2 分钟事件。我读了一些关于IHttpClientFactory的文章。

但我不确定这个解决方案如何解决我们的问题。任何想法将不胜感激。

0 投票
0 回答
769 浏览

.net - 在 .NET 4.7.1 Webapi 中使用 HttpClientFactory

我在 .NET Fw 4.7 下有一个 WebAPI 2 应用程序,需要将其从单例HttpClient实现转换为HttpClientFactory.

我正在尝试使用Microsoft.Extensions.Http库,但我遇到了如何实际使用它的问题。我遵循了几个示例,但其中大多数都引用了 .NET Core,目前这不是一个选项。

我能找到的最接近的例子是Use HttpClientFactory from .NET 4.6.2,但这也没有给出完整的例子。

我认为我遇到的很多问题是因为我对 DI 的相对无知,以及如何在 WebAPI 空间中正确使用它。

使用上面链接中的代码:

如何实现这一点,以便我可以CreateClient()正确访问控制器(或其他类)?

0 投票
2 回答
597 浏览

.net - 单元测试 HttpClient 时如何模拟 GetDiscoveryDocumentAsync?

我正在尝试为 HttpClient 服务编写一些单元测试,并且在尝试模拟 GetAccessToken() 函数中的部分代码时遇到了问题。

该服务接受一个 IHttpClientFactory。从我到目前为止所做的阅读看来,要正确地模拟它,我必须模拟 IHttpClientFactory,让它返回一个依赖于模拟 HttpMessageHandler 的新 HttpClient,我这样做是这样的:

这方面有效,我已经能够调用 CreateClient() 工作正常。但是,我尝试测试的函数调用了我的 GetAccessToken() 函数,该函数又调用了 client.GetDiscoveryAccessToken()。我猜 GetDiscoveryAccessToken() 函数需要被模拟,但我不确定如何继续。

我尝试使用模拟方法创建客户端模拟,并在调用 CreateClient 时返回它,如下所示:

不幸的是,我在告诉 CreateClient 函数返回什么的那一行出现了这个错误:“无法从 'Moq.Mock' 转换为 'System.Net.Http.HttpClient'”。我猜这是因为我需要返回一个真正的 HttpClient 而不是一个 Mocked 。

关于我可以从这里去哪里的任何想法?

0 投票
2 回答
2751 浏览

c# - 模拟使用 IHttpClientFactory.CreateClient 创建的 HttpClient

正如标题所示,我有一些调用IHttpClientFactory.CreateClient()来创建 HttpClient 实例的代码。

我在 .Net Core 3.1 中这样做

我需要嘲笑这个。根据这个问题“C# Mock IHttpclient & CreateClient”,以下应该可以工作......

但是,当我运行它时,会报告以下内容...

System.NotSupportedException:不支持的表达式:_ => _.CreateClient() 扩展方法(此处为:HttpClientFactoryExtensions.CreateClient)不得用于设置/验证表达式。

我显然做错了什么,但我看不出它是什么。

任何人都可以提供任何指示吗?

0 投票
2 回答
3745 浏览

c# - How to add a cookie to a request using HttpClient from IHttpClientFactory

Background
I'm working on an ASP.NET Core Web API where we within our API call a 3rd party API. This 3rd party API requires every request to contain a cookie with an access token. Our API gets this token from a claim (from the ClaimsPrincipal of the user associated with the request).

Details
This answer shows how to set a cookie on a request, but the example requires that one manually constructs the HttpClient (to be able to inject a HttpClientHandler with a CookieContainer). And since it is not desirable to do manual instantiation of the HttpClient, I would rather get the HttpClient injected through DI, which this example illustrates (usin IHttpClientFactory).

In my service, I have access to a an injected HttpClient instance (_httpClient), and the most simple function looks like this:

This GitHub issue asks about how to include authorization cookie when using IHttpClientFactory, and the answer says to use the header propagation middleware. And now to my issue:

From what I can see, you set up the header propagation middleware (with all headers and cookies and whatnot) during service configuration at application startup. In our API however, I do not have the value for the authentication cookie before actually making the request to the 3rd party API.

Question
How can I add a cookie to the request on a HttpClient instance that is injected to my service using IHttpClientFactory, right before making the actual request?

0 投票
1 回答
554 浏览

c# - 由 IHttpClientFactory 注入时模拟 HttpClient 处理程序

我创建了一个自定义库,它自动为特定服务设置 Polly 策略,这些服务依赖于HttpClient.

这是使用IServiceCollection扩展方法和类型化客户端方法完成的。一个简化的例子:

请注意,我的真实代码使用了泛型类型和选项生成器,但为了简单起见,我省略了该部分。我的测试的目的是确认我的选项生成器正确地应用了我希望它应用的策略。为了此处的示例,我们假设它是我要测试的硬编码重试策略。

我现在想测试这个库是否正确地将 Polly 策略注册到我注入的HttpClient依赖项中。

注意
有很多答案可以在网上和 StackOverflow 上找到,其中建议是HttpClient自己构建,即:new HttpClient(new MyMockedHandler());,但这违背了我需要测试实际IHttpClientFactory是否使用请求的策略构建 httpclients 的目的。

为此,我想使用由real生成的real 进行测试,但我希望模拟它的处理程序,这样我就可以避免发出实际的 Web 请求并人为地导致错误的响应。HttpClient IHttpClientFactory

AddHttpMessageHandler()用来注入一个模拟处理程序,但工厂似乎忽略了这一点。

这是我的测试夹具:

这是我的测试:

当我调试测试时,处理程序的断点永远不会被命中,并且响应返回为 200(因为它实际上连接到 URL,而不是命中模拟处理程序)。

为什么 http 客户端工厂忽略了我的模拟处理程序?

请注意,我还将接受任何允许我以另一种有效方式测试策略的答案。

我知道我可以只使用一个损坏的 URL 字符串,但我需要在我的测试中测试特定的 http 响应。

0 投票
1 回答
1872 浏览

c# - 如何在 xamarin 中实现 httpclientfactory?

HttpClient我每次提出请求时都会创建一个新的,但在互联网上搜索后,我发现这不是使用它的最佳方式。

我应该使用HttpClientFactory,但我寻找的每个网站都使用过ServiceCollection()IServiceCollection()类似:

或者

当我尝试创建一个新的ServiceCollection时,Visual Studio 要求我创建一个类,那么如何HttpClientFactoryXamarin中实现?

编辑:我使用此链接进行实验,但我不知道如何将其合并到我的项目中:我有这样的东西:

0 投票
2 回答
696 浏览

c# - 重新设置单例httpclient的证书(重新配置IHttpclientFactory?)

使用 C#、.NET Core 3.1

httpclient我通过 in添加一个单例startup.cs

但是可以说,稍后在ClientLogicA课堂上,我想更改证书,我该怎么做,并且更改是否会持续用于 httpclient 单例的未来使用?

0 投票
1 回答
4340 浏览

c# - IHttpClientFactory 单例 .NET 框架

设想

我正在尝试将我现有的更改HttpClientIHttpClientFactory. 当我验证现有代码时,它使用 using{...} 语句会导致问题,并在此处提及。所以我想到了实现单例 Http 客户端并找到了另一个与此相关的博客,它就在这里

从所有这些中,我了解到最好的一个是IHttpClientFactory在 .NET Core 中引入的。

实施计划

由于这个应用程序在 ASP.NET MVC 4 中并且不使用 DI,所以我必须做一些事情才能在没有 DI 框架的情况下使用。根据我的搜索,从 StackOverflow 获得了答案,并计划以相同的方式实施。同时,我还得到了另一个项目,它已经删除了所有依赖项,可以在早期项目中使用而无需做所有事情。回购是HttpClientFactoryLite.

问题

现在我可以HttpClientFactoryLite通过初始化这个类来使用吗?该描述还提到它可以与现有的 DI 框架一起使用,以便ClientFactory可以注册为单例。请从自述文件中找到措辞

如果您使用依赖注入,请确保将 IHttpClientFactory 注册为单例。

在我的场景中,我没有添加任何 DI 框架。所以我要在需要的地方初始化工厂。在这里,我对两件事感到困惑

  1. 是否有必要为 做一个单例类HttpClientFactoryLite

  2. 这个HttpClientFactory类是如何处理的?是否需要将其作为控制器的一部分或相同的 using 语句等处理?

  3. 基于this的答案, Microsoft.Extensions.Http仅提供HttpClientFactory,而不是新优化的HttpClient。这仅在 .NET Core 2.1 中可用。那么实现 IHttpClientFactory 有什么不同吗?

请指教

0 投票
1 回答
1310 浏览

c# - 无法使 Polly 超时策略覆盖 HttpClient 默认超时

我正在使用 Polly 重试策略,并且正如预期的那样,在重试过程中,HttpClient它的超时时间达到了 100 秒。我尝试了几种不同的方法来合并 Polly Timeout 策略以将超时移动到每次重试而不是总计,但是 100 秒超时一直触发。

我已经阅读了大约 5 个 StackOverflow 问题,它们都说要包装策略,我什至在 Polly wiki 上找到了说要调用AddPolicyHandler两次的演示。那也没有用。我确信我有一些非常基本的错误。请向我解释我的方式的错误。

我正在使用 .net core 5 preview 7 和当前的 Polly nuget 包。

类型化 HttpClient 注册

政策定义

延误/罚款计算