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

本文关键字:应用程序 数据 MVC 存储 | 更新日期: 2023-09-27 17:53:27

在我的应用程序中,当用户登录时,我想存储用户的一些信息,如姓,名,Id,员工Id等,我想在我的web应用程序中的许多地方使用。以前我使用的是表单Authentication

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

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

谁能告诉我做这件事的最好方法?

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

对于您的问题,我建议将您的值存储在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对象,然后像这样创建seion

HttpContext.Current.Session[CurrentCustomer] = CurrentCustomer;

现在在你需要这个值的地方创建你的CUrrentCUstomer对象

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

验证cookie可用于保存字符串。这个字符串可以编码您想要的所有数据。我通常创建一个对象(例如ConnectedUser类),其中包含我想要保存的所有信息。然后重写该类的ToString(),以稍后可以解码的格式返回字符串,以重建ConnectedUser实例。如果您的所有模型都继承自一个基本模型,这甚至更容易,那么基本模型可以具有ConnectedUser类型的属性,然后您可以扩展DefaultModelBinder并覆盖OnModelUpdated()来重建已连接用户的实例。通常我通过一个接受requestcontext的方法来做到这一点,这样如果模型绑定器由于某种原因没有被调用,我就可以从代码中的其他地方调用它。

编辑
    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中注册它。网上有很多关于如何做到这两点的文章。

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

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