我需要做一些相当简单的事情:在我的ASP。NET MVC应用程序,我想设置自定义IIdentity / IPrincipal。哪一个更容易/更合适。我想扩展默认值,这样我就可以调用User.Identity.Id
和User.Identity.Role
之类的东西。没什么特别的,只是一些额外的属性。
我读了大量的文章和问题,但我觉得我把它变得比实际更难。我以为这很容易。如果用户登录,我想设置一个自定义IIdentity。所以我想,我将实现Application_PostAuthenticateRequest
在我的global.asax。但是,它在每个请求时都被调用,我不想在每个请求时都调用数据库,因为那样会从数据库请求所有数据并放入一个自定义IPrincipal对象。这似乎也非常不必要,很慢,而且在错误的地方(在那里进行数据库调用),但我可能错了。或者这些数据从何而来?
因此,我认为,每当用户登录时,我可以在会话中添加一些必要的变量,并将这些变量添加到Application_PostAuthenticateRequest
事件处理程序中的自定义IIdentity中。然而,我的Context.Session
在那里是null
,所以这也不是正确的方法。
我已经为此工作了一天了,我觉得我遗漏了一些东西。这应该不难,对吧?我也对随之而来的所有(半)相关的东西感到困惑。# EYZ0, # EYZ1、# EYZ2 # EYZ3, # EYZ4, # EYZ5, # EYZ6……难道只有我一个人对这一切感到困惑吗?
如果有人能告诉我一个简单,优雅,高效的解决方案来存储一些额外的数据在IIdentity没有所有额外的模糊。那太好了!我知道在SO上有类似的问题,但如果我需要的答案在那里,我一定是忽略了。