我有一个方法,我希望每个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中实现这一目标的最佳方法是什么?
我试图将它放在Controller工厂中,但是我的页面上有一些部分操作,所以它会运行一次。
我也在Global.asax中尝试过BeginRequest,但HttpContext.Current.User在那个时间点为空。
提前致谢!
答案 0 :(得分:0)
首先我要说的是,根据您的工作,您可能希望更多地考虑构建自定义MembershipProvider或至少是自定义HttpModule,但要回答您的问题:
你可能会尝试订阅{H} {h}一般会在HttpRequest完成身份验证后提出的Application_AuthenticateRequest
事件(应该在HttpContext.Current.User
填充之后)
在Global.asax中执行类似的操作
protected void Application_AuthenticateRequest(object sender, EventArgs e)
{
AddPrinciple(HttpContext.Current);
}