如何从控制器外部访问已登录的用户?

问题描述:

我正在使用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我不会推荐。取决于你想要达到什么目标,并且我向你保证有更好的方法。

+0

我试过了,使用HttpContext.Current,它的工作原理。你描述的一些陷阱是什么?上下文将如何为空?为什么你推荐我从不使用这个? –

+0

@Sergio Tapia,如果您正在执行的代码是在某个后台线程中,则上下文将为空。你没有回答我的问题:你在哪里试图访问这些信息? –

+0

啊,我明白你在说什么,Context是Hub类的一部分。你是这个意思吗?我应该使用'Context'而不是'HttpContext'? –