使用SignalR,我相信我应该可以使用UserID Provider
向特定的关联用户发送消息有没有人举例说明如何实施?我搜索并搜索过,找不到任何例子。我需要定位一个javascript客户端。
用例是,我网站的用户将拥有一个帐户。他们可能从多个设备/浏览器登录。当某些事件发生时,我会向他们发送消息。
答案 0 :(得分:1)
我没有研究过SignalR 2.0,但我认为这是SignalR之前版本的扩展。连接到集线器时,可以使用“授权”属性
对其进行装饰[HubName("myhub")]
[Authorize]
public class MyHub1 : Hub
{
public override System.Threading.Tasks.Task OnConnected()
{
var identity = Thread.CurrentPrincipal.Identity;
var request = Context.Request;
Clients.Client(Context.ConnectionId).sayhello("Hello " + identity.Name);
return base.OnConnected();
}
}
如您所见,您可以访问访问集线器的用户的身份。我相信新的能力只不过是对此的延伸。由于连接始终在客户端和集线器之间保持活动状态,因此您将始终拥有将为您提供UserId的主体标识。
答案 1 :(得分:0)
我相信这可以帮到你:(从here链接)
由userId标识的特定用户。
Clients.User(userid).addContosoChatMessageToPage(name, message);
可以使用IUserId接口确定userId:
public interface IUserIdProvider
{
string GetUserId(IRequest request);
}
IUserIdProvider
的默认实施是PrincipalUserIdProvider
。要使用此默认实现,请首先在应用程序启动时在GlobalHost
中注册它:
var idProvider = new PrincipalUserIdProvider();
GlobalHost.DependencyResolver.Register (typeof(IUserIdProvider), () => idProvider);
然后可以通过从客户端传入Request对象来确定用户名。