如何有效地管理对Membership.GetUser()的多次调用

And*_*rew 3 .net c# asp.net-membership asp.net-mvc-2

我有多次调用Membership.GetUser(),似乎无法找到内置的任何内容来处理这个问题(没有多次访问数据库).

在认识到这不适合之前,我首先研究了静态变量.我知道我可以使用会话,但我需要对userID进行哈希/加密以使其安全,这很好但我不想这样做而不检查是否有内置的方法在.net成员中执行此操作提供商

是否有内置的方法来记住像UserID这样的值并安全地存储当前用户的值?

Gre*_*reg 5

我建议使用使用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.