2011-09-02 10 views
11

Estoy usando SignalR para procesar los clics del cliente en mi aplicación MVC3.¿Cómo puedo acceder al usuario conectado desde fuera de un controlador?

Cada vez que un usuario hace clic en algo, necesito verificar que el usuario haya iniciado sesión.

Si este fuera el interior de un controlador MVC3, me gustaría ir:

if (User.Identity.IsAuthenticated) 
{ 
    string username = User.Identity.Name; 

    //My code here. 
} 

Sin embargo, esta no es la ejecución de código dentro de una clase controlador.

Básicamente, ¿cómo puedo acceder al nombre del usuario conectado desde fuera de un controlador?

Respuesta

14

Básicamente, ¿cómo puedo acceder al nombre de usuario conectado desde fuera de un controlador?

Depende de donde desee acceder a ellos. Si no tiene acceso a un HttpContext, siempre puede probar HttpContext.Current.User y rezar para que no sea nulo por alguna razón, como por ejemplo un hilo diferente o algo más. Esto es especialmente posible con SignalR, que depende de las tareas y de un gran número de procesos asincrónicos. Si se trata de un cubo interior SignalR tiene acceso al usuario:

public class Chat: Hub 
{ 
    public void Foo() 
    { 
     string username = Context.User.Identity.Name; 
    } 
} 

Personalmente, no recomendaría alguna vez usando HttpContext.Current. Dependiendo de qué es exactamente lo que está tratando de lograr y dónde le garantizo que hay mejores maneras.

+0

Lo he probado usando HttpContext.Current y funciona. ¿Cuáles son algunas de las trampas que describes? ¿Cómo sería el contexto nulo? ¿Por qué me recomiendan que nunca use esto? –

+0

@Sergio Tapia, el contexto será nulo si el código que está ejecutando es, por ejemplo, en alguna cadena de fondo. No respondiste a mi pregunta: ¿dónde intentas acceder a esta información? –

+0

Ah, veo lo que dices, el contexto es parte de la clase Hub. ¿Es esto lo que quieres decir? Debería usar 'Context' en lugar de' HttpContext'? –

Cuestiones relacionadas