不能在C#类中注入ProtectedSessionStorage。它只能用于Blazor组件。请参阅Microsoft文档,其中说明。。。
我有一个自定义委托处理程序:
public class CustomHandler : DelegatingHandler
{
private readonly TokenProvider tokenProvider;
private readonly ProtectedSessionStorage sessionStorage;
public CustomHandler(
TokenProvider tokenProvider,
ProtectedSessionStorage sessionStorage) : base(new HttpClientHandler())
{
this.tokenProvider = tokenProvider ?? throw new ArgumentNullException(nameof(tokenProvider));
this.sessionStorage = sessionStorage ?? throw new ArgumentNullException(nameof(sessionStorage));
}
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken ct)
{
return await base.SendAsync(request, ct).ConfigureAwait(false);
}
}
TokenProvider
类存储令牌:
public class TokenProvider
{
public string AccessToken { get; set; }
public string IdToken { get; set; }
public string RefreshToken { get; set; }
}
将这些类注入到剃须刀组件中可以按预期工作。
我在应用程序中添加了一个Api控制器:
[Route("api/[controller]")]
[ApiController]
public class UploadController : ControllerBase
{
private readonly TokenProvider tokenProvider;
private readonly ProtectedSessionStorage sessionStorage;
private readonly ILogger<UploadController> logger;
public UploadController(
TokenProvider tokenProvider,
ProtectedSessionStorage sessionStorage,
ILogger<UploadController> logger)
{
this.tokenProvider = tokenProvider;
this.sessionStorage = sessionStorage;
this.logger = logger;
}
}
然而,当控制器被实例化时,TokenProvider
和ProtectedSessionStorage
都为null或空。
是否可以使用DI获取这些类的实例?如果没有,还有其他解决方案吗?
"受保护的浏览器存储依赖于ASP。NET核心数据保护,仅Blazor Server应用程序支持">
https://learn.microsoft.com/en-us/aspnet/core/blazor/state-management?view=aspnetcore-6.0&pivots=服务器