Blazor服务器范围服务不同

时间:2020-09-30 12:27:35

标签: asp.net-core blazor blazor-server-side

我需要存储经过身份验证的用户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。为什么会发生这种情况以及如何解决?

0 个答案:

没有答案
相关问题