我想使用typed HTTP client,所以我在ServiceCollection
上这样注册它
services.AddHttpClient<ApiService>();
客户端发出的所有请求都必须经过身份验证。因此,我需要对上面的代码片段进行一些修改:
services.AddHttpClient<ApiService>(c =>
{
c.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "");
});
无记名令牌需要更新整整5分钟,因此我需要创建需要依赖项的服务,例如HttpClient(用于认证和获取令牌)和MemoryCache(用于存储令牌,只要它是有效的)。 >
问题是,正如您所看到的那样,这仍处于构建服务提供者之前的阶段,因此我现在无法解决任何问题……我在这里有什么选择?
答案 0 :(得分:3)
您可以这样访问ServiceProvider:
services.AddHttpClient<ApiService>(provider, c) =>
{
var token = provider.GetRequiredService<MyTokenService>().GetToken();
c.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
});
如果您没有具有提供者的超载访问权限,则需要更新依赖项。
AddHttpClient
将注册一个临时客户端,以便每次您将func(“工厂方法”)注入某个地方时都可以运行。
答案 1 :(得分:0)
您能在ApiService
的构造函数中执行此操作,还通过DI将身份验证服务传递给它吗?
例如
public class ApiService
{
private readonly HttpClient client;
public ApiService(HttpClient client, IAuthenticationService auth)
{
// configure client here
this.client = client;
}
}