Unified static class between HttpContext and SignalR HubCallerContext

痞子三分冷 提交于 2019-11-30 11:32:25

SignalR gives you access to HubCallerContex instead of HttpContext. You can access HubCallerContext object by using keyword context. If you want to access HttpContext you can fetch it from the context as follows:

System.Web.HttpContextBase httpContext = Context.Request.GetHttpContext();

Hope this helps.

user1921819

Just spent a couple of hours on this problem.

It looks like there is no way to get SignalR context outside of hub class in the same manner like you would do this with HttpContext:

var identity = HttpContext.Current.User.Identity;

or inside Ninject context:

HttpContextBase httpContext = context.Kernel.Get<HttpContextBase>();
var identity = httpContext.Current.User.Identity;

At least the answer to this question states so: Get SignalR User (Hub.Context) outside of hub.

But in this particular case when you need to get current user identity there is a solution which works in both worlds: WebApi/MVC and SignalR.

IPrincipal principal = Thread.CurrentPrincipal;
var identity = principal.Identity;

I used this to get user identity inside my dependency injection code.

Morover, Context property is only available in hub methods (it is null inside hub constructor). But Thread.CurrentPrincipal.Identity will give you the user identity even inside hub constructor.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!