Я создал два проекта из шаблонов.HttpContext.Current.User имеет значение null в OnConnected с идентификатором Asp.Net
Первый содержит членство и MVC4. А второй использует MVC5 и Identity Asp.Net.
Затем я добавил сигналR к обоим проектам, используя тот же код.
В проекте «Членство» я могу получить доступ к HttpContext.User как в контроллерах, так и в классе соединений SignalR (метод OnConnected). Но в проекте Identity у меня есть правильное значение HttpContext.User только в контроллерах. В методе OnConnected HttpContext.User возвращает null.
Кодекс signalR является одинаковым в обоих проектах:
1) SynchronizationConnection.cs
public class SynchronizationConnection : PersistentConnection
{
public SynchronizationConnection()
{
}
protected override Task OnReceived(IRequest request, string connectionId, string data)
{
Debugger.Break();
return base.OnReceived(request, connectionId, data);
}
protected override Task OnConnected(IRequest request, string connectionId)
{
Debugger.Break(); //HttpContext.Current.User == null
return base.OnConnected(request, connectionId);
}
protected override Task OnDisconnected(IRequest request, string connectionId)
{
Debugger.Break();
return base.OnDisconnected(request, connectionId);
}
}
2) Startup.cs
public partial class Startup
{
public void Configuration(IAppBuilder app)
{
app.MapSignalR();
ConfigureAuth(app);
}
}
3) запуска. Auth.cs
public partial class Startup
{
public void ConfigureAuth(IAppBuilder app)
{
app.MapSignalR<Services.Realtime.SynchronizationConnection>("/test");
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login")
});
app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
}
}
4) Клиент Javascript
var connection = $.connection('/test');
connection.logging = true;
console.log('Receiving connection');
connection.received(function (data) {
console.log('received');
});
connection.disconnected(function() {
console.log('disconnected');
});
connection.error(function (data) {
console.log('error');
});
connection.start().done(function() {
console.log('Connection started');
});
Я видел вопросы о нулевой Пользователь.Идентичность.Имя из-за недостающего [Authorize] атрибут. В моем случае я не могу получить доступ даже к User.Identity. Также у меня есть атрибут [Авторизовать] для моего действия, которое содержит javascript клиента.
Как вы разрешили его? –