作为我正在开发的ASP.Net核心项目的一部分,我需要从WebApi中与许多不同的基于Rest的API端点进行通信.为了实现这一点,我使用了许多服务类,每个服务类都实例化一个静态HttpClient.基本上,我为WebApi连接的每个基于Rest的端点都有一个服务类.
HttpClient下面将看到如何在每个服务类中实例化静态的示例.
private static HttpClient _client = new HttpClient()
{
BaseAddress = new Uri("http://endpointurlexample"),
};
Run Code Online (Sandbox Code Playgroud)
虽然上述方法运行良好,但它不允许对正在使用的服务类进行有效的单元测试HttpClient.为了让我能够进行单元测试,我有一个假的HttpMessageHandler,我想HttpClient在我的单元测试中使用,虽然HttpClient实例化如上,但我不能将假的HttpMessageHandler作为我的单元测试的一部分.
HttpClient服务类在整个应用程序中保持单个实例(每个端点一个实例)的最佳方法是什么,但允许HttpMessageHandler在单元测试期间应用不同的实例?
我想到的一种方法是不使用静态字段来保存HttpClient服务类,而是允许使用单例生命周期通过构造函数注入来注入它,这将允许我在单元测试期间指定一个HttpClient所需的HttpMessageHandler,我想到的另一个选项是使用一个在静态字段HttpClient中实例化HttpClients 的工厂类,然后可以通过将HttpClient工厂注入服务类来检索,再次允许HttpMessageHandler在单元测试中返回相关的不同实现.以上都没有感到特别干净,感觉必须有更好的方法吗?
有任何问题,请告诉我.
c# dotnet-httpclient asp.net-core-mvc .net-core asp.net-core
我正在使用 ASP.Net 核心,并且需要访问业务逻辑类(不是控制器或操作)中的特定 HTTP 标头。
为了在此处提供配置的全貌,我有一个自定义 ASP.Net Core Middleware,它基于某些逻辑将一个值添加到自定义 HTTP 标头中,我需要在业务逻辑中访问该标头中的值班级。
目前,我实现此目的的方法是使用以下 DI 注册注入 HttpContextAccessor。
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
Run Code Online (Sandbox Code Playgroud)
在需要访问 HTTP 标头的类中,我然后使用构造函数注入请求 IHttpContextAccessor 并使用它来访问相关的 HTTP 标头。
执行上述操作很好,并为我提供了我需要的结果,查看 Internet 上的各种文章,但普遍的共识似乎是避免在 ASP.Net Core 中使用 HttpContext.Current。
如果是上述情况,我的业务逻辑类是否有更好的方法来访问我的自定义中间件插入到自定义 HTTP 标头中的值?
我应该清楚,虽然目前中间件将所需的值存储在 HTTP 标头中以供业务逻辑类使用,但我对中间件的其他方法持开放态度,使所需的值可用于业务逻辑类(如果有)更好的方法。
任何问题或澄清,请告诉我。
我目前正在创建一个基于微服务架构的新应用程序,并使用Identity Server 4提供的身份验证。
经过大量研究并建立了概念证明,我设置了Identity Server,以确保API和本机应用程序使用令牌成功访问这些服务的安全。
最初,向客户端颁发了用于访问API的访问令牌,但是现在我将其切换为使用参考令牌。现在,问题解决了!
我在这里采用的方法是采用微服务网关,该网关接收参考令牌,然后将其转换为JWT,以包含在对下游微服务的任何请求中。在网关内,如何“交换” JWT的入站参考令牌?Identity Server中是否可以提供帮助?还是我需要使用自省端点,发送参考令牌并检索声明以在网关服务内构造JWT,以便将Authorization标头传递给所有下游服务?
如果有任何其他信息可以帮助您了解体系结构的目标,请告诉我。