我发现在我正在使用的当前应用程序中,我正在几乎每个控制器中检索几个实体(与经过身份验证的用户帐户相关)。这些实体缓存在orm层,但似乎这些实体在验证时加载一次并向应用程序自定义IPrincipal对象添加一些属性是一个很好的候选者。
我想到的另一个选择是创建一个自定义上下文对象(与用户相关的帐户对象)并使用当前请求传递它。
两种方法的优点/缺点?还有另一种方法可以处理像这样的常用对象吗?
答案 0 :(得分:1)
听起来你错过了每次请求都会重新创建IPrincipal / IIdentity实例的事实。如果你没有以明确的方式坚持它,它就不会持久存在。
我认为持有数据的自定义主类与缓存的环境属性之间存在性能差异。
另一方面,自定义身份验证类的缺点是您必须提供自定义身份验证模块,以便在处理管道中的AuthenticateRequest
事件期间重新创建这些实例。换句话说,您必须将FormsAuthenticationModule替换为您自己的。这并不难,但如果不是绝对必要,我不会这样做。
另请注意,某些数据可以保留在表单cookie的UserData部分中。这意味着只要cookie有效并且只创建一次就可以拥有它。