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