我需要做一些相当简单的事情:在我的ASP.NET MVC应用程序中,我想设置一个自定义的IIdentity / IPrincipal。 无论哪个更容易/更合适。 我想扩展默认,以便我可以调用像User.Identity.Id和User.Identity.Role 。 没有什么奇特的,只是一些额外的属性。 我已经阅读了大量的文章和问题,但我觉得我比实际上更难。 我认为这很容易。 如果用户login,我想设置一个自定义的IIdentity。 所以我想,我会在我的global.asax中实现Application_PostAuthenticateRequest 。 但是,每个请求都会调用这个方法,而且我不希望在每个请求中调用数据库,这会请求来自数据库的所有数据并放入一个自定义IPrincipal对象。 这也似乎是非常不必要的,缓慢的,并在错误的地方(在那里做数据库调用),但我可能是错的。 或者数据从哪里来? 所以我想,无论何时用户login,我都可以在会话中添加一些必要的variables,我将这些variables添加到Application_PostAuthenticateRequest事件处理程序中的自定义IIdentity中。 但是,我的Context.Session在那里是null ,所以这也不是要走的路。 我一直在为此工作一天,我觉得我失去了一些东西。 这不应该太难,对吧? 所有与此相关的(半)相关的东西我也有点困惑。 MembershipProvider , MembershipUser , RoleProvider , ProfileProvider , IPrincipal , IIdentity , FormsAuthentication ….我是唯一一个发现这一切非常混乱的人吗? 如果有人能告诉我一个简单,优雅和高效的解决scheme,在一个IIdentity上存储一些额外的数据,而没有额外的绒毛..这将是伟大的! 我知道有类似的问题,但如果我需要的答案在那里,我一定忽略了。