2011-09-02 116 views
11

我正在使用SignalR處理來自我的MVC3應用程序的客戶端的點擊。如何從控制器外部訪問已登錄的用戶?

每次用戶點擊某物時,我都需要驗證登錄的用戶。

如果這是一個MVC3控制器內,我會去:

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

    //My code here. 
} 

但是,此代碼執行不是一個控制器類中。

基本上,我如何從控制器外部訪問登錄的用戶名?

回答

14

基本上,我如何從控制器外部訪問登錄的用戶名?

這取決於你想從哪裏訪問它們。如果您無權訪問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'? –

相關問題