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