我在信号r mvc工作.. 和通过集线器连接未创建我的集线器代码是
public class ChatHub : Hub
{
private readonly static ConnectionMapping<string> _connections =
new ConnectionMapping<string>();
public void SendChatMessage(string who)
{
string name = Context.User.Identity.Name;
Clients.User(who).addChatMessage();
}
public override Task OnConnected()
{
string name = Context.User.Identity.Name;
_connections.Add(name, Context.ConnectionId);
Debug.Write("Shubham Conected");
return base.OnConnected();
}
public override Task OnDisconnected(bool stopCalled)
{
string name = Context.User.Identity.Name;
_connections.Remove(name, Context.ConnectionId);
Debug.Write("Shubham now Disconnected");
return base.OnDisconnected(stopCalled);
}
public override Task OnReconnected()
{
string name = Context.User.Identity.Name;
if (!_connections.GetConnections(name).Contains(Context.ConnectionId))
{
_connections.Add(name, Context.ConnectionId);
}
Debug.Write("Shubham Reconnected");
return base.OnReconnected();
}
public void SendChatMessage(string who, string message)
{
string name = Context.User.Identity.Name;
Debug.Write("Shubham inside the send");
Clients.Group(who).addChatMessage(name + ": " + message);
}
}
当我在visual studio 2013中以调试模式执行它时,它会抛出异常
Context.User.Identity.Name; null reference exception.
我不知道如何解决这个问题。
当我在控制器中使用此语句时,此代码返回userId
。
答案 0 :(得分:1)
请问您能告诉我您使用的身份验证模式,我的意思是您是以编程方式设置上下文还是通过IIS使用Windows身份验证。
首先检查您的MVC应用程序中的身份验证步骤应该在SignalR配置之前
public partial class Startup
{
public void Configuration(IAppBuilder app)
{
ConfigureAuth(app);
app.MapSignalR();
}
}