在我Startup.Auth.cs
:如何通過SignalR將消息發送給特定用戶(身份標識)?
private static void ConfigSignalR(IAppBuilder appBuilder)
{
appBuilder.MapSignalR();
var idProvider = new PrincipalUserIdProvider();
GlobalHost.DependencyResolver.Register(typeof(IUserIdProvider),() => idProvider);
}
我UserHub.cs
:
public class UserHub : Hub
{
}
在服務器端,在我的API控制器動作之一(與網格更新認沽):
[...]
var userHub = GlobalHost.ConnectionManager.GetHubContext<UserHub>();
// Line below does not work
// userHub.Clients.User(userId).send("Hi");
// But this line below works when sending the message to everybody
userHub.Clients.All.send("Hi");
return Request.CreateResponse(HttpStatusCode.OK);
在JS View客戶端:
@Request.IsAuthenticated
{
<script>
$(function() {
var userHub = $.connection.userHub;
console.log(userHub.client);
userHub.client.send = function(message) {
alert('received: ' + message);
};
$.connection.hub.start().done(function() {
});
});
</script>
}
爲什麼在通過userId
時我的客戶端收不到任何東西? (也嘗試通過userName
,結果相同)。
[編輯] 技術上實現了正確的方法是充分利用IUserIdProvider
執行:
- https://docs.microsoft.com/en-us/aspnet/signalr/overview/guide-to-the-api/mapping-users-to-connections#IUserIdProvider
- SignalR - Sending a message to a specific user using (IUserIdProvider) *NEW 2.0.0*
然而,我注意到,在我如果傳遞給GetUserId
方法的IRequest對象的User
屬性始終設置爲null
...
我的理解是最簡單,最乾淨的方式做到這一點是將客戶端和連接存儲在OnConnected方法內的字典中。用戶基於隨機生成的連接ID,因此您傳遞的任何內容都不會匹配。 – willthiswork89