我正在使用 ASP.NET MVC 1.0 开发一个应用程序,并且正在尝试将自定义 IPrincipal 对象注入到 HttpContext.Current.User 对象中。
对于传统的 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。实际上,我是通过拥有一个所有 Pages 都从其继承的自定义类来做到这一点的,它在幕后为我做了这件事。
无论如何,我的问题是,使用 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。