我有一个公开一些REST方法的ASP.NET Web API。客户端浏览器使用登录屏幕使用API进行身份验证。当其他客户端使用API进行身份验证时,我想向所有客户端广播消息(javascript警报)。客户端无需在服务器上调用方法,只需服务器调用客户端上的单个方法即可显示Javascript警报。
My Hub课程:
public class MyHub : Hub
{
public void BroadcastMessage(string userName)
{
Clients.All.notify(userName);
}
}
在我的CustomOAuthProvider类中进行用户身份验证:
if (userAuthenticated)
{
var signalRContext = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
signalRContext.Clients.All.notify(context.UserName);
}
这是我的index.html文件及相关脚本:
<script src="scripts/jquery-2.2.2.min.js"></script>
<script src="scripts/jquery.signalR-2.2.0.js"></script>
<script src="http://localhost:49834/signalr/hubs"></script>
<script>
(function ($) {
$(function () {
var hubProxy = $.connection.myHub;
hubProxy.client.notify = function (username) {
alert(username + ' has logged in');
};
$.connection.hub.start();
});
})(jQuery);
</script>
请注意,动态生成的SignalR Hubs脚本的路径为localhost:49834。这是我的网络API的网址。我包含这个是因为客户端在Node.js http-server中运行,并且不是ASP.NET Web Api项目的一部分。
当我运行此操作时,控制台上没有任何错误,也没有警报。我用一个用户登录然后打开一个单独的浏览器并与第二个用户登录。我不确定为什么我没有使用经过身份验证的用户名获取Javascript Alert
。