2011-09-16 74 views
0

我有一個方法,我希望每個Http請求運行一次,但在像Context.Current.User之類的東西被分配後。每個請求代碼

public static void AddPrincipal(HttpContext context) 
    { 
     var users = DependencyResolver.Current.GetService<IRepository<User>>(); 
     var currentUser = users.Retrieve(u => u.Username == context.User.Identity.Name); 
     var principal = new Principal(currentUser); 
     context.Items.Add("Principal", principal); 
    } 

在ASP.Net MVC3中實現該功能的最佳方法是什麼?

我試圖把它放在控制器工廠,但我在我的頁面上有一些partials行爲,所以它運行的更多一次。

我也嘗試過的BeginRequest在Global.asax中,但HttpContext.Current.User是在那個時間點空..

提前感謝!

回答

0

首先,我會說,根據你在做什麼,你可能希望看到更多的類似建立一個自定義MembershipProvider或至少一個自定義HttpModule,但要回答你的問題:

你可以嘗試訂閱到Application_AuthenticateRequest事件,這是爲了提高HttpRequest中完成認證之後(這應該是HttpContext.Current.User已被填充後)

做這樣的事情在你的Global.asax

protected void Application_AuthenticateRequest(object sender, EventArgs e) 
{ 
    AddPrinciple(HttpContext.Current); 
} 
+0

感謝您的快速響應!剛剛嘗試過,但出於一些奇怪的原因HttpContext.Current.User仍然是Application_AuthenticateRequest中的空值.. :( – OopsImAlive

+0

您是否設置了ASP.NET身份驗證/成員資格?您是否正在嘗試通過身份驗證來執行此操作的HttpRequest? – ericb