33

我正在使用 signalr 和 asp.net MVC3 构建示例聊天应用程序。这是我的信号器集线器的样子

public class MyHub:Hub,IDisconnect
{
 public Task Join()
 {
  string username = HttpContext.Current.User.Identity.Name;
  //find group based on username
  string group = getGroup(username)
  return Groups.Add(Context.ConnectionId, group);
 }

 public void doStuff()
 {
  string group = getGroup();
  Clients[group].doStuffOnBrowser();
 }
}

我的问题是页面加载时我的应用程序崩溃了。在使用调试器单步执行时,我发现 HttpContext.Current.User.Identity.Name 为空,即使用户已经过身份验证。如何在我的 Task Join() 方法中获取用户名?

4

1 回答 1

34

使用SignalR 集线器时,您可以使用该HubCallerContext.User属性来:

获取作为初始 http 请求一部分的用户。

所以尝试一下:

public Task Join()
{
    string username = Context.User.Identity.Name;
    //find group based on username
    string group = getGroup(username)
    return Groups.Add(Context.ConnectionId, group);
}
于 2012-08-26T13:44:32.920 回答