这个问题可能是由于缺少 IAccessTokenProvider
实例导致的。可以创建一个 CustomAccessTokenProvider
类实现 IAccessTokenProvider
,并将其注册到 DI 容器中。
public class CustomAccessTokenProvider : IAccessTokenProvider
{
private readonly IHttpContextAccessor _httpContextAccessor;
public CustomAccessTokenProvider(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
public Task GetAccessTokenAsync(bool refresh = false)
{
return Task.FromResult(_httpContextAccessor.HttpContext.User.FindFirstValue("access_token"));
}
}
接下来,在 Startup.cs
文件中将 CustomAccessTokenProvider
注册到 DI 容器中:
services.AddSingleton();
最后,在 Program.cs
文件中使用 UseSignalR
配置 SignalR:
builder.Services.AddScoped();
builder.Services.AddSignalR()
.AddJsonProtocol()
.AddHubOptions(options =>
{
options.AccessTokenProvider = serviceProvider =>
{
var accessTokenProvider = serviceProvider.GetRequiredService();
return accessTokenProvider.GetAccessTokenAsync();
};
});
builder.Services.AddHttpClient();
var app = builder.Build();
app.AddComponent("app");
await app.RunAsync();