0
私の人生の間、私はここで間違っていることを理解できません...私は、マルチユーザーポータルのための簡単な通知システムを構築しています。プッシュ通知を達成する。シグナルRクエリーストリングが渡されない
私は接続を確立し、すべてのユーザーにプッシュ通知をプッシュできますが、ユーザーIDを追跡してそのIDをサーバーのconnectionIdにマップする必要があることを通知する特定のユーザーをターゲットにします。これを達成するために、ユーザーのIDの暗号化された文字列をサーバーに渡し、作成した接続IDにユーザーのIDを保管するオブジェクトのリストを保管しています。ただし、暗号化されたUserIDをQuery文字列として渡そうとすると、その文字列は渡されません。私がここでうんざりしているアイデア?
Javascriptを
/////Connect to NotificationHub
var nHub = $.connection.notificationHub;
$.connection.notificationHub.qs = { "userId": "1A3BCF" };
////Register Add Notification Method
nHub.client.showNotification = function (message, icon, url) {
console.log("Notification Received!");
console.log("Message: " + message);
console.log("Icon: " + icon);
console.log("URL: " + url);
};
$.connection.hub.start()
.done(function() {
console.log("Successful Connection to Notification Hub");
})
.fail(function() {
console.log("Error Connecting to Notification Hub!");
});
C#ハブ
List<NotificationConnection> connectedUsers = new List<NotificationConnection>();
public override Task OnConnected()
{
var us = new NotificationConnection();
us.userId= Context.QueryString['userId'];;
us.connectionId = Context.ConnectionId;
connectedUsers.Add(us);
return base.OnConnected();
}
public void showNotification(NotificationTargetType target, int objectId, string message, string icon, string url)
{
var hubContext = GlobalHost.ConnectionManager.GetHubContext<NotificationHub>();
if (target == NotificationTargetType.User)
{
var user = connectedUsers.Where(o => o.userId== objectId);
if (user.Any())
{
hubContext.Clients.Client(user.First().connectionId).showNotification(message, icon, url);
}
}
else
{
}
}
再び私は、クエリ文字列を取得したいまでは存在しないため、すべてがスムーズに通過します。
ハブではなく接続時にqを設定してみてください。 – Pawel
これは誤字ですか: 'Context.QueryString ['userId'];'?二重引用符でなければならない – CodingYoshi
@Pawelあなたは正しい道を私に導いた。ありがとうございました。私は以下の変更を加えました –