【问题标题】:Blazor Server-Side with SignalR and Asp.Net Core Identity Feature : Response status code does not indicate success: 401 (Unauthorized)具有 SignalR 和 Asp.Net 核心身份功能的 Blazor 服务器端:响应状态代码不表示成功:401(未经授权)
【发布时间】:2021-07-17 03:19:06
【问题描述】:

希望一切都好。

我正在尝试在我的 Blazor 服务器端应用程序中实现 SignalR,该应用程序还实现了 Asp.net 核心标识。 当我导航到实现信号器集线器的剃须刀页面时,我收到以下消息:

HttpRequestException:响应状态码不表示成功:401(未授权)。

以下以红色突出显示以示例外:

等待 hubConnection.StartAsync();

这是我的剃须刀页面代码:

私有 HubConnection hubConnection;

protected override async Task OnInitializedAsync()
{

    hubConnection = new HubConnectionBuilder()
    .WithUrl(NavigationManager.ToAbsoluteUri("/EmployeePresenceStatusHub"))
    .WithAutomaticReconnect()
    .Build();

    hubConnection.On("ReceiveMessage", () =>
    {
        LoadEmployeesPresenceStatus();
        StateHasChanged();//Refresh the component using updated data
    });

    await hubConnection.StartAsync();

}

这是我的中心类:

public class EmpoyeesPresenceStatusHub : Hub
{
    public async Task SendMessage()
    {
        await Clients.All.SendAsync("ReceiveMessage");
    }
}

我已经按照这里的例子:

Use ASP.NET Core SignalR with Blazor

我假设我的 Blazor 应用程序中的 asp.net 核心身份功能导致了这种情况?

非常感谢任何帮助。

【问题讨论】:

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


【解决方案1】:

尝试使用 Cookie 连接到集线器。我确定这是否理想,但它解决了我的问题。


创建 cookie 提供程序类

    public class CookieProvider
    {
        public string Cookie { get; set; }
    }

将此类注册为范围服务

    buider.Services.AddScoped<CookieProvider>(); //net6.0
    services.AddScoped<CookieProvider>(); //net5.0

在 _imports.razor 中全局注入服务


    @inject CookieProvider CookieProviderService

在 App.razor 中添加一段代码,内容如下

   [Parameter]
   public string Cookie { get; set; }
   protected override Task OnInitializedAsync()
   {
        CookieProviderService.Cookie = Cookie;

        return base.OnInitializedAsync();
   }

_Host.cshtml 内部

@{
    var cookie = 
        HttpContext.Request.Cookies[".AspNetCore.Identity.Application"];

 }

<component type="typeof(App)" param-Cookie="cookie"  render-mode="ServerPrerendered" />

最后创建您的 Hub 连接

 var container = new CookieContainer();
            var cookie = new Cookie()
            {
                Name = ".AspNetCore.Identity.Application",
                Domain = "localhost",
                Value = CookieProviderService.Cookie
            };
            container.Add(cookie);
            hubConnection = new HubConnectionBuilder()
                            .WithUrl(_navigationManager.ToAbsoluteUri(ChatHub.HubUrl),
                             options =>
                             {
                                 options.Cookies = container;
                             })
                            .WithAutomaticReconnect()

                            .Build();

【讨论】:

    猜你喜欢
    • 2021-11-02
    • 1970-01-01
    • 2020-06-27
    • 2016-04-22
    • 1970-01-01
    • 2018-08-02
    • 1970-01-01
    • 1970-01-01
    • 2015-07-16
    相关资源
    最近更新 更多