【发布时间】:2020-08-07 14:37:10
【问题描述】:
我正在学习位于here 的SignalR Microsoft 教程。
一切正常,但是,我想尝试更改 ChatHub#SendMessage 中的代码以向特定用户发送消息。
所以我修改了这样的代码:
public class ChatHub : Hub
{
public async Task SendMessage(string user, string message)
{
//await Clients.All.SendAsync("ReceiveMessage", user, message);
await Clients.User(user).SendAsync("ReceiveMessage", message);
}
}
但是,用户永远不会收到消息。仅当您使用 Clients.All.SendAsync(即上面注释掉的行)时才会发送消息。
我还做了更多的研究,从this answer 发现,也许我需要实现一个自定义用户提供程序。所以我实现了一个:
public class CustomUserIdProvider : IUserIdProvider
{
public string GetUserId(HubConnectionContext connection)
{
return "user1";
}
}
然后在Startup.cs,我注册了这个provider:
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.AddSingleton<IUserIdProvider, CustomUserIdProvider>();
services.AddSignalR();
}
然后我尝试在发送消息时使用Context.UserIdentifier,如下所示:
public async Task SendMessage(string user, string message)
{
//await Clients.All.SendAsync("ReceiveMessage", user, message);
await Clients.User(Context.UserIdentifier).SendAsync("ReceiveMessage", message);
}
但它似乎仍然没有发送消息。
我做错了什么?
【问题讨论】:
-
@Andy- 感谢您的链接,我确实查看了那个链接。但是,不幸的是,它不适用于 dotnet core。
-
啊,真可惜……我讨厌这样。但其中一些可能会转移。我将添加一个关于如何根据组处理用户的答案。也许它在未来可能会有用。
标签: asp.net-core signalr