簡體   English   中英

信號 R - OnDisconnectedAsync(異常?異常) Function 不工作

[英]Signal R - OnDisconnectedAsync(Exception? exception) Function is Not working

我正在使用 blazor web 組件在 web 上開發聊天應用程序

我正在嘗試將用戶的狀態(在線/離線)相互推送。

在此處輸入圖像描述

這是信號RHub

在此處輸入圖像描述

在連接上工作正常。

公共覆蓋任務 OnConnectedAsync()

我的問題是 OnDisconnectedAsync() 根本沒有被調試器擊中

即使我關閉了與服務器連接的客戶端(瀏覽器)。

    public override Task OnDisconnectedAsync(Exception? exception)
    {
        var userId = _userManager.GetUserId(Context.User);


        return base.OnDisconnectedAsync(exception);
    }

您需要為 signalr 集線器的服務器上的令牌配置中間件。

services.AddAuthentication().AddIdentityServerJwt();

services.TryAddEnumerable(
    ServiceDescriptor.Singleton
        <IPostConfigureOptions<JwtBearerOptions>,ConfigureJwtBearerOptions>());
public class ConfigureJwtBearerOptions : IPostConfigureOptions<JwtBearerOptions>
{
    public void PostConfigure(string name, JwtBearerOptions options)
    {
        var originalOnMessageReceived = options.Events.OnMessageReceived;
        options.Events.OnMessageReceived = async context =>
        {
            await originalOnMessageReceived(context);

            if (string.IsNullOrEmpty(context.Token))
            {
                var accessToken = context.Request.Query["access_token"];
                var path = context.HttpContext.Request.Path;

                if (!string.IsNullOrEmpty(accessToken) &&
                    path.StartsWithSegments("/hubs"))
                {
                    context.Token = accessToken;
                }
            }
        };
    }
}

注意:這假設您的 signalr 集線器端點以“/集線器”開頭

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM