我需要存储经过身份验证的用户Session Id
,每个用户会话从字典中检索访问令牌。
我有简单的作用域服务services.AddScoped<SessionService>();
public class SessionService
{
public string SessionId { get; set; }
}
在MainLayout.razor
中,我将其注入并在用户登录时进行设置。效果很好。
@inject SessionService SessionService
.....
@code {
[CascadingParameter]
private Task<AuthenticationState> AuthenticationStateTask { get; set; }
protected override async Task OnInitializedAsync()
{
SessionService.SessionId = (await AuthenticationStateTask).User.GetSessionId();
}
}
但是,我是根据HttpClient
创建IHttpClientFactory
并根据用户Session Id
获取访问令牌的,但是获取SessionService
的所有3种不同方法都具有{ {1}}设置为空
SessionId
如果我在组件内部使用服务,则services.AddHttpClient("backend", async (provider, client) =>
{
var httpContextAccessor = provider.GetService<IHttpContextAccessor>();
var httpContextService = httpContextAccessor.HttpContext.RequestServices.GetService<SessionService>();
using var scope = provider.CreateScope();
var anotherProvider = services.BuildServiceProvider();
var anotherSession = anotherProvider.GetService<SessionService>();
var sessionId = scope.ServiceProvider.GetService<SessionService>()?.SessionId;
client.BaseAddress = ...;
});
必须是它,而不是null。为什么会发生这种情况以及如何解决?