2014-03-04 45 views
0

我在我的應用中使用SimpleMembership,並且當我需要獲取當前用戶的userId時我使用WebSecurity.CurrentUserId但這調用了數據庫,我需要將此調用減少爲數據庫。如何在用戶登錄時創建自定義BaseController以保留關於用戶的數據

這就是爲什麼我要創建BaseController : Controller存儲userId這裏。什麼是實施這個最好的方法?

我可以創建:

public class BaseController : Controller 
{ 
    public int CurrentUserId { get; set; } 
    ... 

並登錄設置這個值後。但我相信這不應該那麼簡單。

回答

1

您HttpContext的User屬性設置爲您已登錄的用戶。像這樣(從我CustomPrincipal實施拉)...

在你的Global.asax:

protected void Application_PostAuthenticateRequest(Object sender, EventArgs e) 
{ 
    /// Code to get user 
    ... 
    ContextHelper.GetHttpContextBase().User = user; 
} 

在另一個輔助類:

public static class ContextHelper 
{ 
    public static HttpContextBase GetHttpContextBase() 
    { 
     return new HttpContextWrapper(HttpContext.Current); 
    } 
} 

然後在您的BaseController:

public abstract class BaseController : Controller 
{ 
    public new HttpContextBase HttpContext { get; private set; } 

    protected virtual new ICustomPrincipal User 
    { 
     get { return HttpContext.User as ICustomPrincipal; } 
    } 
} 
+0

''ICustomPrincipal是什麼? 'ContextHelper.GetHttpContextBase()。user = user;'用戶可以是我的用戶權限類嗎? – 1110

+0

如前所述,ICustomPrincipal是我的實現。如果你的用戶屬於不同的類型,你顯然需要改變它。重點是你應該將你當前登錄的用戶設置爲HttpContext的User屬性。 – im1dermike

相關問題