2011-09-02 15 views
11

Używam SignalR do przetwarzania kliknięć od klienta w mojej aplikacji MVC3.Jak mogę uzyskać dostęp do zalogowanego użytkownika spoza kontrolera?

Za każdym razem, gdy użytkownik coś kliknie, muszę zweryfikować zalogowanego użytkownika.

Gdyby to było wewnątrz kontrolera MVC3, pójdę:

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

    //My code here. 
} 

to jednak wykonanie kodu nie jest wewnątrz klasy kontrolera.

Zasadniczo, w jaki sposób uzyskać dostęp do nazwy zalogowanych użytkowników spoza kontrolera?

Odpowiedz

14

Zasadniczo, w jaki sposób mogę uzyskać dostęp do nazwy zalogowanych użytkowników spoza kontrolera?

To zależy od tego, gdzie chcesz uzyskać do nich dostęp. Jeśli nie masz dostępu do HttpContext, zawsze możesz spróbować HttpContext.Current.User i modlić się, aby nie był pusty z jakiegoś powodu, na przykład z innego wątku lub czegoś innego. Jest to szczególnie możliwe dzięki SignalR, który zależy od zadań i mnóstwa przetwarzania asynchronicznego. Jeśli jest wewnątrz piasty danej SignalR za masz dostęp do użytkownika:

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

Osobiście nie polecam kiedykolwiek używając HttpContext.Current. W zależności od tego, co dokładnie próbujesz osiągnąć i gdzie gwarantuję, że istnieją lepsze sposoby.

+0

Próbowałem go za pomocą HttpContext.Current i to działa. Jakie są niektóre z pułapek, które opisujesz? W jaki sposób kontekst byłby nieważny? Dlaczego polecasz Nigdy tego nie używam? –

+0

@ Sergio Tapia, kontekst będzie pusty, jeśli wykonywany kod jest na przykład w wątku tła. Nie odpowiedziałeś na moje pytanie: gdzie próbujesz uzyskać dostęp do tych informacji? –

+0

Ah Widzę, co mówisz, Kontekst jest częścią klasy Hub. Czy to masz na myśli? Powinienem użyć "Kontekstu" zamiast "HttpContext"? –

Powiązane problemy