C# 使用.net内核中的信号器向单个用户和管理员角色用户发送通知

C# 使用.net内核中的信号器向单个用户和管理员角色用户发送通知,c#,asp.net-core,asp.net-core-signalr,C#,Asp.net Core,Asp.net Core Signalr,基本上,我做了一个中心,当存储库中发生某些操作时,它会发送通知。我想将此更改为signle User sending,例如,如果该用户发生操作,则发送通知,或者将所有通知发送给管理员角色用户 现在我只有一个集线器,我使用 await _hubContext.Clients.All.SendAsync("displayNotification", ""); 在html端 const connection = new

基本上,我做了一个中心,当存储库中发生某些操作时,它会发送通知。我想将此更改为signle User sending,例如,如果该用户发生操作,则发送通知,或者将所有通知发送给管理员角色用户

现在我只有一个集线器,我使用

                await _hubContext.Clients.All.SendAsync("displayNotification", "");
在html端

    const connection = new signalR.HubConnectionBuilder()
        .withUrl("/NotificationHub")
        .configureLogging(signalR.LogLevel.Information)
        .build();

    connection.on('displayNotification', () => {
        getNotification()
        toastr.info("You hava a new Notification");
    }
    );

    async function start() {
        try {
            await connection.start();
            console.log("connected");
        } catch (err) {
            console.log(err);
            setTimeout(() => start(), 5000);
        }
    };

    connection.onclose(async () => {
        await start();
    });

    start();
我想将此更改为signle User sending,例如,如果该用户发生操作,则发送通知,或者将所有通知发送给管理员角色用户

当我们从hub类外部调用hub方法时,没有与调用相关联的
调用方。因此,我们不能使用诸如
Clients.Caller.sendsync(“ReceiveMessage”,user,message)
之类的代码片段将消息发送回调用者

要实现向特定用户发送消息的要求,您可以创建单个用户组(一个针对单个用户的组),然后在只希望访问该特定用户时向该组发送消息

您还可以将所有管理员用户添加到一个组中,以便通过向该组发送消息将通知推送到所有管理员用户

await _hubContext.Clients.Group(groupName_Here).SendAsync("ReceiveMessage", $"{message_here}");  
有关“信号机中的组”的更多信息,请检查:

此外,为了实现相同的需求,正如@Prolog所提到的,您还可以将用户映射到ConnectionId,然后使用下面的代码片段将消息发送到特定的已连接客户端

await _hubContext.Clients.Clients(connectionIds_here).SendAsync("ReceiveMessage", $"{message_here}");

您需要知道通知应该发送给谁,更确切地说,需要知道目标用户的连接id。假设您有一台带有集线器的服务器,您可以创建一个内存存储(例如字典),将连接id与用户关联起来。在已连接的用户上添加条目,断开连接时删除。然后,当存储库中发生某些操作时,检索与该操作相关的用户的信息,将该信息用作从内存存储中检索该用户连接id的键。最后,如果找到连接id(用户已连接),则发送通知。Hi@LukacexLadze,有关于此案例的更新吗?