gpt4 book ai didi

android - 使用 SignalR 2 在 Phonegap/Cordova 应用程序中向特定用户发送消息

转载 作者:太空狗 更新时间:2023-10-29 13:56:29 24 4
gpt4 key购买 nike

我正在尝试为 Phonegap/Cordova 应用程序创建实时通信功能。我正在使用 SignalR 2 来处理通信。

我正在努力解决的问题是向特定用户发送消息。那里的每个示例都显示保存 Context.User.Identity.Name,这对我来说没用,因为我的 phonegap 应用程序不共享远程站点的 User.Identity 上下文。

本质上,我不是在传统意义上对用户进行身份验证,因此我需要另一种方法将 SignalR connectionID 与我传递的用户名相关联。

取自官方的 ASP.NET signalr 示例,我有以下代码覆盖了 OnConnected 事件。不幸的是,它不接受任何参数并且期望 User.Identity 不为空:

public override Task OnConnected()
{
using (var db = new UserContext())
{
// Retrieve user.
var user = db.Users
.Include(u => u.Rooms)
.SingleOrDefault(u => u.UserName == Context.User.Identity.Name);

// If user does not exist in database, must add.
if (user == null)
{
user = new User()
{
UserName = Context.User.Identity.Name
};
db.Users.Add(user);
db.SaveChanges();
}
else
{
// Add to each assigned group.
foreach (var item in user.Rooms)
{
Groups.Add(Context.ConnectionId, item.RoomName);
}
}
}
return base.OnConnected();
}

现在,也许我需要的是这个方法的一个版本,它将一个字符串作为参数,然后我将它用作我的用户标识符。

但是如何去做呢?

最佳答案

您需要为用户创建一个新的 IUserIdProvider 并使用依赖注入(inject)来注册您的提供者并使用它。

public interface IUserIdProvider
{
string GetUserId(IRequest request);
}

向 Global Host 注册您的提供商

GlobalHost.DependencyResolver.Register(typeof(IUserIdProvider), () => new MyIdProvider());

用法:

public class MyHub : Hub
{
public void Send(string userId, string message)
{
Clients.User(userId).send(message);
}
}

取自:http://www.asp.net/signalr/overview/guide-to-the-api/mapping-users-to-connections#IUserIdProvider

关于android - 使用 SignalR 2 在 Phonegap/Cordova 应用程序中向特定用户发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39245416/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com