如何从控制器外部访问已登录的用户?
问题描述:
我正在使用SignalR处理来自我的MVC3应用程序的客户端的点击。如何从控制器外部访问已登录的用户?
每次用户点击某物时,我都需要验证登录的用户。
如果这是一个MVC3控制器内,我会去:
if (User.Identity.IsAuthenticated)
{
string username = User.Identity.Name;
//My code here.
}
但是,此代码执行不是一个控制器类中。
基本上,我如何从控制器外部访问登录的用户名?
答
基本上,我如何从控制器外部访问登录的用户名?
这取决于你想从哪里访问它们。如果您无权访问HttpContext
,则可以随时尝试HttpContext.Current.User
并祈祷它不会由于某种原因(例如,不同的线程或其他内容)而为空。对于依赖于任务和大量异步处理的SignalR,这尤其更有可能。如果是SignalR的轮毂内可以访问用户:
public class Chat: Hub
{
public void Foo()
{
string username = Context.User.Identity.Name;
}
}
个人你曾经使用HttpContext.Current
我不会推荐。取决于你想要达到什么目标,并且我向你保证有更好的方法。
我试过了,使用HttpContext.Current,它的工作原理。你描述的一些陷阱是什么?上下文将如何为空?为什么你推荐我从不使用这个? –
@Sergio Tapia,如果您正在执行的代码是在某个后台线程中,则上下文将为空。你没有回答我的问题:你在哪里试图访问这些信息? –
啊,我明白你在说什么,Context是Hub类的一部分。你是这个意思吗?我应该使用'Context'而不是'HttpContext'? –