问题标签 [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.
c# - 为集成测试创建默认的 HttpClientFactory
我有一个键入的客户端,我想将其注册为单例:
类型化的客户端必须是单例的,因为它有一些断路器逻辑,如果 API 限制客户端的速率,它会断开电路。必须在整个应用程序中断开电路,而不仅仅是当前的请求管道(否则客户端将继续访问已经受到其他实例速率限制的 API)。这已经通过使用封装了该功能的类型化客户端来实现(虽然不是 Polly)。
现在因为类型化的客户端将是一个单例,所以我们不能注入一个单例,HttpClient
因为这会带来我们之前在一个 long living 中遇到的所有问题HttpClient
。显而易见的解决方案是注入一个HttpClientFactory
now 可用于在HttpClient
每次键入客户端需要一个实例时发出一个实例,而不必担心生命周期管理等,因为这已推迟到HttpClientFactory
现在。
我现在的问题是如何HttpClientFactory
为一个简单的功能集成测试创建一个默认值,我想在其中实例化一个类型化的客户端,看看我是否可以点击 API 并从自动化测试中获得成功的响应?
我不想围绕它设置一个 ASP.NET Core TestServer 和一个完整的应用程序,因为这对于我现在想做的那种功能测试来说太过分了。
没有可用于注入的公共构造函数HttpClientFactory
?
c# - 我可以在不是 ASP.NET Core 的 .NET.core 应用程序中使用 HttpClientFactory 吗?
我已阅读有关使用 HttpClientFactory的热门博文https://www.stevejgordon.co.uk/introduction-to-httpclientfactory-aspnetcore
引用它
ASP.NET Core 2.1中提供了一个新的 HttpClientFactory 功能,它有助于解决开发人员在使用 HttpClient 实例从其应用程序发出外部 Web 请求时可能遇到的一些常见问题。
所有示例都显示在 asp.net 应用程序的启动类中将其连接起来,例如
我的问题是你可以在 ASP.NET 核心之外使用吗?如果是的话,有没有例子
我会认为很多非网络应用程序(.net 核心应用程序)需要进行网络调用,那么为什么这不是 .net 核心 api 的一部分而不是放入 asp.net 核心 api
memory - HttpClientFactory 内存泄漏
在我的 c# 控制台应用程序(.net 4.6.1)中,我需要对随机端点进行 API 调用(Get/Post/Put/delete)等。url、payload 等的详细信息来自数据库表。控制台应用程序获取 httpClientFactory 实例,如下所示
对于从表中获得的每条记录,我调用一个方法来进行 API 调用。对于那个方法,我传递了 httpClientFactory。在该方法中,我正在创建和使用 HttpClient,如下所示。
我不在处理 httpClient 的地方。当我看到内存使用情况时,它一直在增加,即使在几个小时后我也没有看到它下降。
我关注了以下文章 https://docs.microsoft.com/en-us/aspnet/core/fundamentals/http-requests?view=aspnetcore-2.1
我用对了吗?我应该使用“使用(httpClient)”吗
asp.net-core-2.1 - 具有动态配置的 HttpClientFactory
我正在开发 .net 核心网络应用程序,它需要以特定的时间间隔调用远程 API(每 2 分钟,20 次不同的 API 调用,我需要向最终用户显示 API 结果),托管有4 个不同的域名
我使用 HttpClient 来调用远程 API。但是随着用户的增加,我的 CPU 使用率增加了 40%。我怀疑 HttpClient 可能是原因。在浏览了几篇博客之后,我正在尝试使用 HttpClientFactory。
我有一个从 Controller Action 调用的方法,我需要根据几个参数动态识别 BaseUrl 。目前我在 StartUp.cs 中创建了 4 个 NamedClients,如下所示:
然后像这样在课堂上使用:
在这里,根据 displayname 参数,我可以决定使用哪个 NamedClient。
有没有其他有效的方法来实现所需的功能?我可以改用 TypedClient 吗?
c# - 添加 HttpClientFactory 导致 cancelTokenSource 错误
我的 HttpClientFactory 有问题,我正在尝试将 CancellationTokenSource 从 DI 注入到我的“SomeClient”,该“SomeClient”配置为:
我在 AddScoped<>() 的 Startup.cs 中注入了 cancelTokenSource。
如果我将 CancellationTokenSource 添加到 SomeClient 构造函数,它会说
无法从根提供程序解析范围服务“System.Threading.CancellationTokenSource”。
但如果我创建类似的东西:
并在构造函数中新建一个本地HttpClient,并注入CancellationTokenSource,一切都会好起来的。
所以我的问题是如何将 CancellationTokenSource 与 HttpClientFactory 一起使用?
c# - 在某些调用中不使用 httpClient.BaseAddress 会导致创建新客户端吗?
我正在使用.net core 2.1
HttpFactory
并且我BaseAddress
在调用时在启动中设置了services.AddHttpClient
.
几乎我所有的调用都使用BaseAddress
,但有些需要调用其他 URL,所以对于那些,我直接传递完整的 URL。
这会处理我的httpClient
并创建一个新的吗?我是否应该拥有 2 种不同的客户端类型并在启动时分别注册它们BaseAddress
(我什至可以使用HttpFactory
?)?
我在问这个问题,因为我的集成测试在使用“超时样式”取消令牌的调用方面存在问题。
PS:不使用BaseAddress
会很痛苦,因为 URL 取决于环境。
更新:我测试了注册命名客户端。一种用于主要情况,另一种用于不同的情况BaseAddress
。它似乎对我的集成测试有所帮助,因为现在它们很少超时(当它们超时时,我认为它可能与另一个问题有关)。
这增加了我原来的问题,因为它似乎会影响性能。再说一次,是否有可能对使用Client
the 或完整地址的呼叫使用相同的地址会提示对from the 的BaseAddress
处置/娱乐?Client
HttpFactory
asp.net-core - Asp.net Core 2.1 HttpClientFactory:第二个api调用不等待第一个api调用的返回结果
我在使用 HttpClientFactory 时遇到了问题。我需要从一个第三方 Web api 调用两个 Web 方法。
- 获取订单号。
- 获取运输标签文件。
调用 #2 取决于 #1 的结果,因为它需要将 orderNumber 传递给它,例如:
当我设置断点和调试时,它按预期工作。没有调试模式,#2 web 方法总是失败。我做过调查。如果我传递静态查询参数,例如:
它工作正常。似乎 #2 在 orderNumber 给它之前评估查询字符串并执行 api 调用。非常令人沮丧,请您对这个问题有所了解吗?
在控制器上:
HttpClient 类型类:
asp.net - 使用 HttpClientFactory 是否安全?
在我的 asp.net 核心 MVC 应用程序中,我正在使用为 API 服务器的请求HttpClientFactory
创建对象。HttpClient
遵循 Microsoft 文档,HttpClient
每次调用时都会创建新对象HttpClientFactory.CreateClient()
,因此将值设置为HttpClient.DefaultRequestHeaders
.
关于HttpMessageHandler
对象,因为它们是池化的,以后可以重复使用。因此,如果他们持有 cookie 信息(例如:将 cookie 设置为HttpClientHandler
对象),我们将违反线程安全。
我的假设是否正确?我们该如何处理这个问题?
如果我们设置 cookie 是否可以HttpRequestMessage
,然后我们将发送它HttpClient
?
asp.net-mvc - 是 HttpClientFactory 错误吗?
我有一个带有以下代码的 Web 应用程序和一个 API 应用程序:
网站:
接口:
Test
如果我第一次(在 Firefox 上)调用我的操作,响应将是First time。但是如果我第二次调用(在 Chrome 中),响应将大于 1。
这是不正确的,因为在其他浏览器中,它必须被视为第一次。
经过调查(使用调试),在对 API 的第二次请求中,我发现 pooledHttpClientHandler
被重新使用(正如我们在使用时所期望的那样HttpClientFactory
)并且CookieContainer
ofHttpClientHandler
也被重新使用,HasAccessed cookie 的值为true => This导致问题。(我预计这个 cookie 不存在,因为它被认为是 Chrome 对 API 的第一个请求)
这个问题有什么解决办法吗?
c# - 在控制器和 ActionFilter 之外获取 ModelState
有没有办法ModelStateDictionary
从 DI 访问(在控制器或 ActionFilter 之外)?我想我可以制作一个 ActionFilter 来存储对ModelStateDictionary
某处的引用,以便稍后在其他地方访问它,但我想知道是否有一种传统的方式来访问它,例如IHttpContextAccessor
for HttpContext
。
我们有一个 Web 应用程序,它是我们 api 的客户端。我想这样做的原因是因为我想ModelState
从DelegatingHandler
我们的 API 客户端(一个类型化的 http 客户端)使用的网络应用程序中自动添加错误。处理程序将监视来自 API 的每个响应,并且对于适用的响应(正文中带有自定义错误代码的 400 个响应,例如“名称已采用”),将消息添加到ModelState
.
到目前为止,我已经尝试过要求 a ControllerContext
,但它似乎总是为空。
我还使用 VS 调试器查看了所有注册的服务,但我找不到任何有希望的东西。
关于关于 SRP 和关注点分离的评论的旁注(相当大的一个):我不认为这违反了 SRP。API 客户端是我们 API 的通用客户端实现,可以在任何地方使用(我们目前在 Xamarin 和 ASP.NET Core MVC Web 应用程序上使用它 - 在这个问题中提到的那个)。但是,API 客户端HttpClient
在其构造函数中需要 a,这意味着它的行为可以被它的消费者修改。
例如,Web App 使用 DI 来提供HttpClient
API 客户端的需求。这HttpClient
是设置为使用两个委托处理程序,其中一个是我在这个问题中描述的那个。
至于是否ModelState
应该在控制器之外进行操作:嗯,这正是库之类的FluentValidation
(和 ASP.NET 默认验证)所做的。
至于是否ModelState
应该在 a 中操作DelegatingHandler
:我认为这是一个更有效的讨论。然而,没有人真正提出过为什么这是不好的论据。
至于这是否应该“自动”完成:我认为将代码放在一个地方比必须记住在每次调用 api 的每个动作中每次都这样做更好。
至于是否应该将这些消息放入ModelState
: 好吧,如果我在这里进入,这个旁注会变得太大。而且,没有人真正争论过这一点,所以......