如果有人尝试在asp.net core中实现此操作,您可以使用声明。
public class CustomEmailProvider : IUserIdProvider
{
public virtual string GetUserId(HubConnectionContext connection)
{
return connection.User?.FindFirst(ClaimTypes.Email)?.Value;
}
}
任何标识符都可以使用,但必须是唯一的。例如,如果您使用名称标识符,则意味着如果有多个用户名与收件人相同,则消息也会被传递给他们。我选择电子邮件,因为它对每个用户都是唯一的。
然后在启动类中注册服务。
services.AddSingleton<IUserIdProvider, CustomEmailProvider>()
下一步。在用户注册期间添加声明。
var result = await _userManager.CreateAsync(user, Model.Password);
if (result.Succeeded)
{
await _userManager.AddClaimAsync(user, new Claim(ClaimTypes.Email, Model.Email));
}
发送消息给特定用户。
public class ChatHub : Hub
{
public async Task SendMessage(string receiver, string message)
{
await Clients.User(receiver).SendAsync("ReceiveMessage", message);
}
}
注意:消息发送者将不会被通知消息已发送。如果你想在发送者那端获得一个通知,请将
SendMessage
方法更改为以下内容。
public async Task SendMessage(string sender, string receiver, string message)
{
await Clients.Users(sender, receiver).SendAsync("ReceiveMessage", message);
}
只有在需要更改默认标识符时才需要执行这些步骤。否则,跳过到最后一步,通过传递userIds或connectionIds到SendMessage
即可简单地发送消息。了解更多