如何在mvc中存储数据以便跨应用程序使用它

时间:2013-01-16 09:24:04

标签: c# asp.net-mvc-3 asp.net-mvc-4

在我的应用程序当用户登录时,我想存储一些用户的信息,如firstname,lastname,Id,employee Id等,我想在我的Web应用程序的许多地方使用。 以前我使用的是表单身份验证

FormsAuthentication.SetAuthCookie(empDetails.Employee.EmployeeId, false);

但它只存储一个参数。我想存储我将在我的应用程序中使用的多个数据。

任何人都可以告诉我最好的方法。

3 个答案:

答案 0 :(得分:1)

auth cookie可用于保存字符串。该字符串可以编码您想要的所有数据。 我通常创建一个对象(例如ConnectedUser类),它具有我想要保存的所有信息。然后我重写类的ToString()以返回fomrat中的字符串,我稍后可以解码以重建ConnectedUser实例。如果所有模型都从单个basemodel继承,那么这甚至变得更容易,那么basemodel可以具有ConnectedUser类型的属性,然后您可以扩展DefaultModelBinder并覆盖OnModelUpdated()以重建连接用户的实例。通常我通过一个接受requestcontext的方法来做这个,就像我可以从代码中的其他地方调用它,如果没有因为某种原因调用了modelbinder。

修改

    public class ConnectedUser{

        public string FirstName{get;set;}
        public string LastName{get;set;}
        public override string ToString(){
            return string.format("FirstName{0}{1}{2}LastName{0}{3}",EqualDelimiter, FirstName, EntryDelimiter, LastName);
        }
     }

现在在Auth cookie的构造函数中而不是传入userId,您传递了一个ConnectedUser实例,其中填充了FirstName和LastName。当收到请求时,您可以使用这两种方法检索连接的用户从defaultModelBinder的自定义扩展或在操作方法等中调用

    public static ConnectedUser GetConnectedUser(HttpContextBase executingContext)
    {
            var dictionary = GetAuthCookieData(executingContext);
            var toRet = new ConnectedUser
            {
                FirstName = dictionary["FirstName"],
                LastName= dictionary["LastName"]
            }
            return toRet;
     }
     public static IDictionary<string, string> GetAuthCookieData(HttpContextBase executingContext)
    {
        HttpCookie toCheck = executingContext.Request.Cookies[FormsAuthentication.FormsCookieName];
        FormsAuthenticationTicket decrypted = FormsAuthentication.Decrypt(toCheck.Value);
        string userData = decrypted.UserData;
        return userData.ToDictionary<string, string>();
    }

扩展DefaultModelBinder应该是直截了当的,不要忘记在Global.asax中注册它。网上有很多关于如何做到两者的文章。

答案 1 :(得分:1)

对于您的问题,我建议您将值存储在HTTPCOntext.Current.Session

首先创建一个这样的类

    public class CurrentCustomer
    {
            public string FirstName { get; set; }
            public string LastName { get; set; }
            public string Email { get; set; }

            private string _Token;
            public string Token
            {
                get
                {
                    return _Token;
                }
                set
                {
                    _Token = value;
                }
            }
     }

然后登录用户后(意味着用户被授权) 获取所有您需要的数据填充您的CurrentCustomer对象,然后像这样创建您的Seeion

HttpContext.Current.Session[CurrentCustomer] = CurrentCustomer;

现在无论你需要什么价值,都要创建你的CUrrentCUstomer对象。

CurrentCustomr obj = ((CurrentCustomer)HttpContext.Current.Session[CurrentCustomer]);

这就是你所需要的一切。

答案 2 :(得分:0)

您可以存储包含所需参数的JSON字符串:

{name:"NAME",id:"IDENTIFIER",email:"EMAIL"}

然后在恢复时解析它。