在Blazor Server中,您需要再次注入身份验证标识以使SignalR不会受到影响。可以通过以下方式实现:
首先,在Startup.cs中配置身份验证:
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme) .AddCookie(options => { options.LoginPath = "/login"; });
接下来,在ConfigureServices方法中添加以下代码以允许SignalR使用身份验证Cookie:
services.AddSignalR().AddCookieAuthentication();
最后,在Configure方法中,将下面这行代码添加到UseAuthentication()之后,并在BlazorHub之前添加以下代码:
app.UseAuthentication();
app.UseSignalR(routes =>
{
routes.MapHub
在Blazor页面中注入IHubContext,并使用WithAutomaticReconnect(),如下所示:
@inject IHubContext
protected async override Task OnInitializedAsync() { var connection = new HubConnectionBuilder() .WithUrl(NavigationManager.ToAbsoluteUri("/blazorhub")) .WithAutomaticReconnect() .Build();
await connection.StartAsync();
BlazorHubContext.InitializeHub(connection);
connection.On("BlazorMethod", (data) =>
{
Console.WriteLine("BlazorMethod received:" + data);
});
}
通过执行上述步骤,应该可以解决Blazor Server中的SignalR Cookie身份验证问题。
上一篇:BlazorServer中是否可以在中间件中注入作用域服务并在组件中注入同一实例?
下一篇:BlazorServer中StateHasChanged引发InvalidOperationException的错误