And*_*rew 3 .net c# asp.net-membership asp.net-mvc-2
我有多次调用Membership.GetUser(),似乎无法找到内置的任何内容来处理这个问题(没有多次访问数据库).
在认识到这不适合之前,我首先研究了静态变量.我知道我可以使用会话,但我需要对userID进行哈希/加密以使其安全,这很好但我不想这样做而不检查是否有内置的方法在.net成员中执行此操作提供商
是否有内置的方法来记住像UserID这样的值并安全地存储当前用户的值?
我建议使用使用HttpContext.Items属性的Singleton-per-Request模式.
public class UserPerRequest
{
/// <summary>
/// Returns the result of Membership.GetUser(), but will cache the results within the
/// current request so it's only called once per request.
/// </summary>
public static MembershipUser Current
{
get
{
const string key = "UserPerRequest";
if (HttpContext.Current.Items[key] == null)
HttpContext.Current.Items[key] = Membership.GetUser();
return (MembershipUser)HttpContext.Current.Items[key];
}
}
}
Run Code Online (Sandbox Code Playgroud)
所以,无论你打电话的地方,Membership.GetUser()只需打电话UserPerRequest.Current.在请求期间,您仍然可以多次调用数据库,如果Membership.GetUser()返回null.