【发布时间】:2016-05-27 01:09:45
【问题描述】:
所以我对 signalR 还很陌生,并且曾在 MVC 上使用过它。现在我在带有 angularjs 的 webapi 中使用它,有点困惑或者忘记了我做了什么。我正在使用带有 webapi 的不记名令牌,并正在尝试创建一个通知系统。
我想弄清楚的是使用 angularjs 和 signalR 的正确方法。我看到很多人在/调用时使用代理。当我从服务器调用 hubcontext 时,proxy.on 是这样的吗:
IHubContext hubContext = GlobalHost.ConnectionManager.GetHubContext<NotificationHub>();
hubContext.Clients.User(UserId).broadcastNotification("Good morning! The time is " + DateTime.Now.ToString());
proxy.invoke 方法来自客户端?如果是这样,哪一种是使用通知系统的最佳方式(我会假设 proxy.on)?
我的第二个问题更多关于向特定用户发送通知。对于向特定用户发送请求,我假设您希望在集线器上这样做:
public void SendNotification(string userId)
{
Clients.User(userId).broadcastNotification("Good morning! The time is " + DateTime.Now.ToString());
}
我的创业公司是这样的:
public class MyProvider : IUserIdProvider
{
public string GetUserId(IRequest request)
{
var userId = request.User.Identity.Name;
return userId.ToString();
}
}
public void Configuration(IAppBuilder app)
{
HttpConfiguration config = new HttpConfiguration();
ConfigureOAuth(app);
WebApiConfig.Register(config);
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
app.UseWebApi(config);
Database.SetInitializer(new MigrateDatabaseToLatestVersion<AuthContext, Travelfy.API.Migrations.Configuration>());
GlobalHost.DependencyResolver.Register(typeof(IUserIdProvider), () => new MyProvider());
app.MapSignalR("/hubs", new HubConfiguration());
}
当我刷新页面时,我注意到我所有的用户 ID 都是空字符串“”。我读到这可能是由于使用了不记名令牌。如果是这样,我将如何使用不记名令牌来指定我想要发送到的用户 ID?当我使用 Clients.All 一切正常,所以我假设它必须与我得到的启动/用户 ID 相关。
谢谢
【问题讨论】:
标签: asp.net angularjs asp.net-web-api signalr signalr-hub