Bunu asp.net çekirdeğinde yapmaya çalışan herkes için. İddiaları kullanabilirsiniz.
public class CustomEmailProvider : IUserIdProvider
{
public virtual string GetUserId(HubConnectionContext connection)
{
return connection.User?.FindFirst(ClaimTypes.Email)?.Value;
}
}
Herhangi bir tanımlayıcı kullanılabilir, ancak benzersiz olması gerekir. Örneğin bir ad tanımlayıcı kullanırsanız, bu, alıcıyla aynı ada sahip birden fazla kullanıcı varsa, mesajın onlara da teslim edileceği anlamına gelir. Her kullanıcıya özel olduğu için e-postayı seçtim.
Ardından hizmeti başlangıç sınıfına kaydedin.
services.AddSingleton<IUserIdProvider, CustomEmailProvider>();
Sonraki. Kullanıcı kaydı sırasında talepleri ekleyin.
var result = await _userManager.CreateAsync(user, Model.Password);
if (result.Succeeded)
{
await _userManager.AddClaimAsync(user, new Claim(ClaimTypes.Email, Model.Email));
}
Belirli bir kullanıcıya mesaj göndermek için.
public class ChatHub : Hub
{
public async Task SendMessage(string receiver, string message)
{
await Clients.User(receiver).SendAsync("ReceiveMessage", message);
}
}
Not: Mesajı gönderene, mesajın gönderildiği bildirilmez. Gönderenin tarafında bir bildirim istiyorsanız. SendMessage
Yöntemi buna değiştirin .
public async Task SendMessage(string sender, string receiver, string message)
{
await Clients.Users(sender, receiver).SendAsync("ReceiveMessage", message);
}
Bu adımlar yalnızca varsayılan tanımlayıcıyı değiştirmeniz gerektiğinde gereklidir. Aksi takdirde, userIds veya connectionIds ileterek mesaj gönderebileceğiniz son adıma atlayın SendMessage
. Daha fazlası için