สำหรับใครที่พยายามทำในแกน asp.net คุณสามารถใช้การอ้างสิทธิ์
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
ได้ สำหรับข้อมูลเพิ่มเติม