每个请求代码

时间:2011-09-16 21:16:54

标签: asp.net-mvc-3 httpcontext

我有一个方法,我希望每个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在那个时间点为空。

提前致谢!

1 个答案:

答案 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);
}