如何在启动后创建命名客户端?

问题描述 投票:0回答:1

对于我的应用程序,我需要为HttpRequests创建一个命名客户端。我可以在启动中创建一个命名的客户端。为了访问它,我注入了“ IHttpClientFactory”并从中创建一个客户端。但是客户端需要具有访问令牌作为授权标头,并且我无法在Startup中创建该令牌。因此,我需要一种在Startup类之外创建命名客户端的方法。我已经尝试将“ IServiceCollection”注入控制器。但这不起作用。

或者在启动时已经创建命名客户端之后,也许有一种方法可以对其进行编辑?

c# asp.net-core httpclient
1个回答
0
投票

您可以使用Polly向您的客户端添加策略处理程序。然后,如果请求返回401未经授权,则可以添加逻辑。因此,例如,让您的客户端刷新承载令牌,并将其也设置为当前请求。这只是一个快速的解决方案,也许还有更优雅的解决方案。但是,如果您的令牌过期并且它会自动刷新,这也将派上用场。

services.AddHttpClient("YourClient")
            .AddPolicyHandler((provider, request) =>
            {
                return Policy.HandleResult<HttpResponseMessage>(r => r.StatusCode == HttpStatusCode.Unauthorized)
                    .RetryAsync(1, async (response, retryCount, context) =>
                    {
                        var client = provider.GetRequiredService<IYourClient>();
                        request.Headers.Authorization = new AuthenticationHeaderValue("Bearer",  await client.RefreshToken());
                    });
            });
© www.soinside.com 2019 - 2024. All rights reserved.