【发布时间】:2021-01-08 14:14:15
【问题描述】:
为了安全起见,我创建了一个带有“个人帐户”的 ASP.NET 托管项目。 “.Client”应用程序在 Program.cs 类中附带以下内容。
builder.Services.AddHttpClient("BlazorApp1.ServerAPI", client => client.BaseAddress = new Uri(builder.HostEnvironment.BaseAddress))
.AddHttpMessageHandler<BaseAddressAuthorizationMessageHandler>();
// Supply HttpClient instances that include access tokens when making requests to the server project
builder.Services.AddScoped(sp => sp.GetRequiredService<IHttpClientFactory>)
.CreateClient("BlazorApp1.ServerAPI"));
我知道第一行创建了一个 HttpClient 服务,它为每个请求添加一个令牌。第二行将此 HTTP 客户端添加到任何其他请求“HttpClient”的服务。
如果我向 Program 类添加服务:
builder.Services.AddScoped<IPostService, PostService>();
看起来像这样:
public class SomeService: ISomeService
{
private readonly HttpClient _httpClient;
public UserActivityService(HttpClient httpClient)
{
_httpClient = httpClient;
}
public async Task<SomeOutputClass> Get()
{
return await _httpClient.GetFromJsonAsync<SomeOutputClass>($"{apiUrl}");
}
}
那么服务将始终使用“BlazorApp1.ServerAPI”HttpClient,这需要身份验证。
我想要做的是能够拥有一个不使用此“BlazorApp1.ServerAPI”HttpClient,但使用不需要授权的 HttpClient 的单独服务。有没有办法做到这一点?也许通过创建一个单独的、命名为 HttpClient 并传递给服务,例如:
builder.Services.AddScoped<IPostService, PostService>(OtherHttpClient);
【问题讨论】:
-
你不能这样做吗:
builder.Services.AddScoped<IPostService, PostService>(sp => new PostService(new HttpClient(){ //Customize httpclient config }));?或者定义一个static并通过它。 -
感谢您的回复。我不知道如何“自定义 httpclient 配置”或创建一个静态配置并通过它。因此我被困住了。
标签: blazor asp.net-core-identity blazor-webassembly