配置 HttpClient 以使用服务来填充身份验证标头?

San*_*dro 3 c# dependency-injection .net-core asp.net-core

我想使用类型化的 HTTP 客户端,所以我在ServiceCollection

services.AddHttpClient<ApiService>();
Run Code Online (Sandbox Code Playgroud)

客户端发出的所有请求都必须经过身份验证。所以我需要稍微修改一下上面的代码片段:

services.AddHttpClient<ApiService>(c =>
{
    c.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "");
});
Run Code Online (Sandbox Code Playgroud)

不记名令牌需要每 5 分钟更新一次,因此我需要创建需要依赖项的服务,例如 HttpClient(用于身份验证并获取令牌)和 MemoryCache(用于存储令牌(只要令牌有效))。

问题是,正如您所看到的,这仍然处于服务提供者构建之前的阶段,所以我目前无法解决任何问题......我在这里有什么选择?

JOS*_*Ftw 6

您可以像这样访问 ServiceProvider:

services.AddHttpClient<ApiService>(provider, c) =>
{
    var token = provider.GetRequiredService<MyTokenService>().GetToken();
    c.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
});
Run Code Online (Sandbox Code Playgroud)

如果您无权访问提供程序的重载,您将需要更新您的依赖项。 AddHttpClient将注册一个瞬态客户端,以便每次将其注入某处时 func(“工厂方法”)都会运行。