我正在使用ASP.NET MVC 1.0的应用程序,我试图注入到HttpContext.Current.User对象的自定义IPrincipal对象。ASP.NET MVC自定义IPrincipal注入
对于传统的WebForms应用程序,我使用Application_AuthenticateRequest事件来执行此操作,如下所示。
protected void Application_AuthenticateRequest(object sender, EventArgs e)
{
if (HttpContext.Current.User != null)
{
if (HttpContext.Current.User.Identity.IsAuthenticated)
{
if (HttpContext.Current.User.Identity is FormsIdentity)
{
// Get Forms Identity From Current User
FormsIdentity id = (FormsIdentity)HttpContext.Current.User.Identity;
// Get Forms Ticket From Identity object
FormsAuthenticationTicket ticket = id.Ticket;
// Create a new Generic Principal Instance and assign to Current User
SiteUser siteUser = new SiteUser(Convert.ToInt32(id.Name));
HttpContext.Current.User = siteUser;
}
}
}
}
因此,通过明确地将User对象转换为输入SiteUser来访问我的自定义IPrincipal。我其实是通过拥有一个自定义的类来实现的,所有的页面都是从这个类继承而来的。
无论如何,我的问题是,使用ASP.NET MVC时,Application_AuthenticateRequest似乎在任何请求发生时触发(所以对于JS文件,图像等)导致应用程序死亡。
任何关于如何将自定义IPrincipal注入到ASP.NET MVC 1.0中的HttpContext.Current.User对象的帮助或建议将不胜感激。我确实在SO上看到以下帖子,但它似乎并未满足我想要实现的目标:ASP.NET MVC - Set custom IIdentity or IPrincipal
TIA。
不应该死,无论文件类型 - 你看到什么错误? – blowdart 2009-10-13 10:35:38
我在Application_AuthenticateRequest方法上获得了每个请求的资源的“命中”。与没有使用Application_AuthenticateRequest方法的情况下运行相比,它使页面渲染速度缓慢。 SiteUser对象的构造函数没有做任何特别壮观的事情,只是从DB获取用户详细信息和角色列表。 – 2009-10-13 13:39:22
当然,你做的,这就是IIS7的工作原理 - 我以为你的意思是死于一个错误 – blowdart 2009-10-14 08:54:01