gpt4 book ai didi

signalr - SignalR-向OnConnected发送参数吗?

转载 作者:行者123 更新时间:2023-12-03 21:20:57 28 4
gpt4 key购买 nike

我有以下JS工作:

var chat = $.connection.appHub;


我的应用程序有一个单一的中心 AppHub,它处理两种类型的通知- ChatOther。我使用一个集线器,因为我需要一直访问所有连接。

我需要能够通过类似以下内容来告诉 OnConnected它是哪种类型:

[Authorize]
public class AppHub : Hub {
private readonly static ConnectionMapping<string> _chatConnections =
new ConnectionMapping<string>();
private readonly static ConnectionMapping<string> _navbarConnections =
new ConnectionMapping<string>();
public override Task OnConnected(bool isChat) { // here
string user = Context.User.Identity.Name;
if (isChat){
_chatConnections.Add(user, Context.ConnectionId);
_navbarConnections.Add(user, Context.ConnectionId);
} else{
_navbarConnections.Add(user, Context.ConnectionId);
}
}
}


理想情况下,用法是这样的:

var chat = $.connection.appHub(true);


如何从javascript将该参数传递给中心?

更新:

发信息:

 // will have another for OtherMessage
public void SendChatMessage(string who, ChatMessageViewModel message) {
message.HtmlContent = _compiler.Transform(message.HtmlContent);
foreach (var connectionId in _chatConnections.GetConnections(who)) {
Clients.Client(connectionId).addChatMessage(JsonConvert.SerializeObject(message).SanitizeData());
}
}

最佳答案

我宁愿向您从客户端调用的中枢添加一个方法以订阅该类型。例如。

public void Subscribe(bool isChat) {
string user = Context.User.Identity.Name;
if (isChat){
_chatConnections.Add(user, Context.ConnectionId);
} else{
_otherConnections.Add(user, Context.ConnectionId);
}
}


集线器连接后,可以调用此方法。这样一来,便可以更加灵活地更改通知类型,而不必重新连接。 (退订和订阅)

另类

如果您不想要额外的往返/灵活性。连接到集线器时,可以发送QueryString参数。 Stackoverflow答案: Signalr persistent connection with query params.

 $.connection.hub.qs = 'isChat=true';


在OnConnected中:

 var isChat = bool.Parse(Context.QueryString["isChat"]);

关于signalr - SignalR-向OnConnected发送参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20724511/

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