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

.net-core - Polly IHttpClientFactory 和处理 401(未经授权)

我正在使用 Polly 并IHttpClientFactory处理我的容错,这对于 .NET Core 3.1 中的重试和断路器工作正常

我没有尝试处理任何可以在控制器中执行的 401,但我找不到从 StartUp 刷新令牌的方法

这是我在启动时的政策

但正如您所期望的那样,这与实际控制器是分离的。

要重新授权,我需要使用所有凭据调用并获取一个新令牌到端点。

然后我添加以下标题

但是我如何从 StartUp 中做到这一点?

0 投票
1 回答
419 浏览

c# - 在 Prism 中使用 IHttpClientFactory

我想IHttpClientFactory在使用 Prism 库构建的 WPF 应用程序中使用。我添加了两个包,Prism.Unity 和 Prism.Unity.Extensions,我尝试IHttpClientFactory使用以下代码注册:

但是,我收到以下错误:

在 Prism.Unity.ContainerExtension 中为 CreateScope 键入加载异常。

我还添加了以下覆盖:

0 投票
1 回答
321 浏览

inversion-of-control - 用于完整框架 (4.7) 和 IoC 的 IHttpClientFactory

我正在尝试在 Full Framework 4.7(非核心)中注册 IHttpClientFactory。我正在使用 IoC 容器(LightInject)

问题,我没有直接访问内部类 DefaultHttpClientFactory 的实现 https://github.com/dotnet/runtime/blob/master/src/libraries/Microsoft.Extensions.Http/src/DefaultHttpClientFactory.cs 这个类不是可见,因为它不公开。我找到了第 3 方实现的解决方案 - https://github.com/uhaciogullari/HttpClientFactoryLite ,它使用自己的接口。

是否可以将接口 IHttpClientFactory 与 IoC 用于完整框架(不是 .net 核心)?

如果可能的话,在 IoC 注册期间,我可以使用什么类作为 IHttpClientFactory 的实现?

0 投票
3 回答
2345 浏览

c# - HttpClient:该实例已经启动了一个或多个请求。只能在发送第一个请求之前修改属性

我有一个 ASP.NET MVC 应用程序,每次在 UI 中按下按钮时,它都会调用一个 ASP.NET Web API REST 服务。

每次按下此按钮时,DumpWarehouseDataIntoFile都会执行以下方法。

Warehouse类对象:

我在这篇文章中发现了这种模式:

不建议使用,因为它会导致套接字耗尽 ( System.Net.Sockets.SocketException)。建议将其HttpClient用作静态变量并重用它,因为它有助于减少套接字的浪费。所以我使用了一个静态变量。

这种方法的问题(在我的场景中)是它只在第一次按下按钮时起作用,下一次按下按钮并DumpWarehouseDataIntoFile执行方法,抛出以下异常:

执行请求时发生未处理的异常。 System.InvalidOperationException: 此实例已启动一个或多个请求。只能在发送第一个请求之前修改属性。

正如错误所说,基地址等属性只能在发送第一个请求之前修改一次。

我用谷歌搜索并找到了一些建议的解决方案:

第一个解决方案

因此,正如这里提出的那样,单例模式似乎是一个不错的选择。在 Alper 提出的单例下:

用法

我在这里看到的问题是,如果您多次调用上述代码(在我的情况下是每次按下 UI 上的按钮并调用DumpWarehouseDataIntoFile方法),您MyApiClient每次都会创建一个实例,因此HttpClient会创建一个新的实例我想重用HttpClient,而不是制作很多实例。

第二种解决方案

按照Nico建议创建一种工厂。在他建议的代码下方:

用法

在这里,您再次创建一个新实例,HttpClient每次调用CreateClient. 您不重用HttpClient对象。

第三个解决方案

使用这里IHttpClientFactory解释的HTTP 请求。问题是它只适用于 .NET Core,而不是标准的 ASP.NET Framework,尽管它似乎可以通过安装这个 nuget package来使用。它似乎自动有效地管理实例,我想将它应用到我的场景中。我想避免重新发明轮子。HttpClient

我从未使用过IHttpClientFactory,也不知道如何使用它:配置一些功能,如基地址、设置请求标头、创建一个实例,HttpClient然后调用PostAsync它作为参数传递HttpContent.

我认为这是最好的方法,所以有人可以告诉我我需要做的必要步骤,以便在DumpWarehouseDataIntoFile方法中做同样的事情,但使用IHttpClientFactory?我有点迷茫,我不知道如何申请做与我在方法IHttpClientFactory内做的一样的事情。DumpWarehouseDataIntoFile

此处未提出的任何其他解决方案以及一些代码片段将不胜感激。

0 投票
1 回答
211 浏览

c# - 如何在 MVVM 灯光 MainViewmodel 中注册 IHttpClientFactory

我正在使用 MVVM Light 编写 WPF 应用程序,我最初的想法是使用静态 Httpclient 来从多个设备中抽象数据,关于使用静态 Httpclient 的 DNS 存在问题。那么,如果我要使用 IHttpClientFactory,我应该如何进行设置?

我读的是我的 MainViewModel 构造函数需要这样做:

我在这里有两个问题:

a) 我无法在 ViewLocator 注册 MainViewModel

b)在启动时是否需要以下要求,我应该在哪里使用这种方法?

或者有人在 WPF 中使用 IHttpClientFactory 和 MVVM Light?

谢谢

西蒙

0 投票
1 回答
2029 浏览

c# - 鉴于 .RAZOR 文件中没有正常的类结构,如何将 IHttpClientFactory 与 .NET Core 5.x 和 Blazor 一起使用?

我想在这篇文章的开头说明我在长期使用 Java 之后对 C#、.NET Core 和 Blazor 非常陌生。

我正在关注 Microsoft 关于Make HTTP requests using IHttpClientFactory in ASP.NET Core的文档,但我似乎无法理解如何在我的应用程序中使用它。

我有一个 API 端点的 IP 地址,所以我创建了一个命名客户端:

接下来,我转到页面顶部文档的“基本用法”部分,其中显示:

可以使用依赖注入 (DI) 请求 IHttpClientFactory。以下代码使用 IHttpClientFactory 创建一个 HttpClient 实例

它说要为我的类创建一个构造函数并传入一个 IHttpClientFactory:

这是我的问题“开始”的地方。为 Blazor 应用程序创建新的 Razor 组件时,生成的 .RAZOR 文件如下所示:

当我需要调用 API 时,我需要创建这个方法:

总之,它看起来像这样:

如您所见,我没有一个“正常”的类结构来创建构造函数,向其传递IHttpClientFactory参数,我可以使用它创建一个新的 HttpClient。

那么,我该怎么做呢?

0 投票
1 回答
54 浏览

c# - 使用 IHttpclientFactory 获取令牌

我在 IhttpclientFactory 中编写了以下代码。由于某些原因,代码没有返回令牌。oauth 返回 null。如果有人愿意看看并告诉我哪里出错了,我将不胜感激。谢谢你

0 投票
1 回答
32 浏览

acumatica - Acumatica 和 IHttpClientFactory

是否可以将 IHttpClientFactory 与 Acumatica 一起使用?还是只能用mvc构建?我在处理屏幕中为 REST 调用构建了一个 apiclient,并在 startup.cs 页面中注入服务,但出现错误:

此时无法启动异步操作。异步操作只能在异步处理程序或模块内或在页面生命周期中的某些事件期间启动。如果在执行页面时发生此异常,请确保该页面标记为 <%

我添加了对 autofac 的引用。我需要以不同的方式添加或注册服务的配置吗?

0 投票
0 回答
270 浏览

c# - 在 Xamarin Android 应用程序上的网络还原时出现“网络无法访问”错误

我正在开发一个 Android Xamarin 应用程序。此应用程序通过 Wi-fi 连接到设备(该设备是接入点),当应用程序连接到设备时,手机上没有互联网连接。

因此,当我断开与设备 AP 的连接并将手机连接到具有互联网连接的另一个网络时,我尝试向服务器发出 HTTP 请求,但我总是收到“网络无法访问”错误,即使手机确实有连接(测试访问 Chrome )。只有在我重新启动应用程序后才能再次工作。

我正在使用我在网上找到的关于 HttpClient 类的所有良好实践(不包含在“使用”语句中,只使用一个静态 HttpClient 对象而不是在每个请求上创建一个新对象等)

我实现了 IHttpClientFactory 来创建 HttpClient,但仍然得到同样的错误。

我的代码(简化):

0 投票
1 回答
81 浏览

.net - .Net IHttpClientFactory 与 Singleton 的使用

因此,如果我有一个通过 DI 注册为单个实例(Singleton)的类,并且我在该类中注入了 IHttpClientFactory。

在每次调用函数调用时我使用 _clientFactory.CreateClient 创建一个新客户端是否正确?或者我应该在工厂的构造函数中创建一个客户端,然后为每个函数调用重新使用它?

谢谢