对于我的应用程序,我需要为HttpRequests创建一个命名客户端。我可以在启动中创建一个命名的客户端。为了访问它,我注入了“ IHttpClientFactory”并从中创建一个客户端。但是客户端需要具有访问令牌作为授权标头,并且我无法在Startup中创建该令牌。因此,我需要一种在Startup类之外创建命名客户端的方法。我已经尝试将“ IServiceCollection”注入控制器。但这不起作用。
或者在启动时已经创建命名客户端之后,也许有一种方法可以对其进行编辑?
您可以使用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());
});
});