我正在使用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。实际上,我通过一个自定义类来实现这一点,该类继承了所有页面,并在其内部执行了相关操作。无论如何,我的问题是,在ASP.NET MVC中,每当进行任何请求时(例如JS文件、图像等),Application_AuthenticateRequest似乎都会触发,导致应用程序崩溃。
如果您有任何帮助或建议,可以让我在ASP.NET MVC 1.0中将我的自定义IPrincipal注入到HttpContext.Current.User对象中,将不胜感激。我看到了stackoverflow上的以下帖子,但似乎不适合我想要实现的目标: ASP.NET MVC - 设置自定义IIdentity或IPrincipal TIA.