signalR - 获取用户名

29 c# asp.net-mvc-3 signalr signalr-hub

我正在使用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();
 }
}
Run Code Online (Sandbox Code Playgroud)

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

nem*_*esv 28

使用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);
}
Run Code Online (Sandbox Code Playgroud)

  • @ user1确保Startup类中的`app.MapSignalR();`在配置认证后,即`ConfigureAuth(app);`否则你的Context.User将为null http://stackoverflow.com/a/22028296/2073920 (6认同)
  • @ user1我知道这个问题已经有3年了,但它仍然是相关的,因为我昨天遇到了同样的`Context.User` null问题并且已经解决了.所以为了节省其他人的时间,我已经评论了我的解决方案:) (4认同)
  • 我尝试了你的代码片段,但是当我单步执行调试器时,Context.User.Identity.Name仍为null.有什么想法吗? (3认同)