我有一个MVC应用程序,其中有一个用户类,用户也可以模拟另一个用户(仅限管理员用户)。
所以我有下面的代码来验证请求并实例化我的版本的用户类。
然后它尝试从Session对象中获取模拟的用户,但在global.asax中的此方法中不可用Session。
希望这有意义。
我还能怎么做呢?
我的问题是,在global.asax方法的哪个点上,您可以访问每个请求的Session对象?
protected void Application_OnAuthenticateRequest(object sender, EventArgs e)
{
IMylesterService service = ObjectFactory.GetInstance<IMylesterService>();
if (Context.User != null)
{
if (Context.User.Identity.IsAuthenticated)
{
User user = service.GetUser(Context.User.Identity.Name);
if (user == null)
throw new ApplicationException("Context.user.Identity.name is not a recognized user");
User impersonatedUser = (User)this.Session["ImpersonatedUser"];
if (impersonatedUser == null)
user.ImpersonatedUser = user;
else
user.ImpersonatedUser = impersonatedUser;
System.Threading.Thread.CurrentPrincipal = Context.User = user;
return;
}
}
User guest = service.GetGuestUser();
guest.ImpersonatedUser = guest;
System.Threading.Thread.CurrentPrincipal = Context.User = guest;
}