我有一个从 jscript 客户端调用的典型 Web api 控制器。在服务器处理请求期间,我想向一组信号器客户端发送消息,但与当前 Web api http 请求对应的客户端除外。
在信号器上下文不可用的那一刻,我如何获得该连接 ID?当然,我可以让客户端使用 http 请求的其余参数显式发送它,但我想知道是否有更优雅的方式。
我有一个从 jscript 客户端调用的典型 Web api 控制器。在服务器处理请求期间,我想向一组信号器客户端发送消息,但与当前 Web api http 请求对应的客户端除外。
在信号器上下文不可用的那一刻,我如何获得该连接 ID?当然,我可以让客户端使用 http 请求的其余参数显式发送它,但我想知道是否有更优雅的方式。
没有比这更优雅的方式了。连接 id 存储在客户端上,通常与信号器客户端发出的每个请求一起传递。
如果您实现了它,我已经创建了一个库,用于使您的后端服务总线和 SignalR 之间的差距更加无缝。你可以这样做,从你的 WebApi 方法
eventAggregator.Publish(new MyEvent(data));
还有我的事件
public class MyEvent : Event
{
public MyEvent(Data data)
{
this.PerformedBy = Thread.CurrentPrincipal.Identity.Name;
}
}
然后为该事件创建一个约束处理程序
public class MyEventConstraint : EventConstraintHandler<Event>
{
public bool Allow(MyEvent myEvent, username, dynamic constraint)
{
return myEvent.PerformedBy != username;
}
}
您还可以使 MyEvent 通用,以便您可以为所有实体重用它
更多信息以及如何设置它 https://github.com/AndersMalmgren/SignalR.EventAggregatorProxy/wiki
请注意,属于该用户的所有客户端都不会收到该事件