ASP.NET Core使用Session

不知道各位伙伴在学习.NET Core过程中有没有发现,Session没法直接用的,和以前的.NET Framework框架相比,已经不再是简简单单的Session来调用了,这确实是个挺操蛋的问题,但是人家这么安排也有它的道理,让我们去更好的熟悉它的使用过程,其实Session的使用,相当于被它封装成了类似中间件这种独立的模块来使用,下面我们就来探究下,怎么.NET Core中使用Session:
同样的,我们需要在Startup.cs注入一下Session,一行代码轻松解决:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    
    
      //session
      app.UseSession();
 }
    

这里需要注意啊,其余多余的代码已经被我我省略了,这里只探究Session的使用,你原来配置好的代码,千万别删,注入Session确实就是这么简单,可是使用起来可不是这么简单哦!简单的StringInt来记住和从Session我相信一点问题都没有。


 //Int类型设置、读取
 HttpContext.Session.SetInt32("intKey", 1258);
 int intKey = (int)HttpContext.Session.GetInt32("intKey");

  //string类型设置、读取
  HttpContext.Session.SetString("strKey", "strKey");
  string strKey = HttpContext.Session.GetString("strKey");
  

很简单对吧,看起来是挺简单的,可是在实际的使用过程中,我们的Session难道就只会用来记住stringInt,简单的类型?显然是不可能的,.NET CoreSession比较烦人的是,当我使用Session记住的是泛型,如:用户信息类,那它保存的是二进制数据,所以我们需要一个辅助类来进行Byte转换,从而保证拿到的是我们想要的、直观的数据:

 public class ByteConvert
    {
    
    
        /// <summary>
        /// 转换byte[]
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        public static byte[] ConvertByte(object obj)
        {
    
    
            string json = JsonConvert.SerializeObject(obj);
            byte[] result = Encoding.UTF8.GetBytes(json);
            return result;
        }

        /// <summary>
        /// 转换object
        /// </summary>
        /// <param name=""></param>
        /// <param name=""></param>
        /// <returns></returns>
        public static object GetObject(byte[] buffer)
        {
    
    
            string json = Encoding.UTF8.GetString(buffer);
            var result=JsonConvert.DeserializeObject<object>(json);
            return result;
        }

        /// <summary>
        /// 泛型转换object
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="buffer"></param>
        /// <returns></returns>
        public static T GetObject<T>(byte[] buffer)
        {
    
    
            string json = Encoding.UTF8.GetString(buffer);
            var result = JsonConvert.DeserializeObject<T>(json);
            return result;
        }

我们再来看具体实现:还是那句话,我们只是使用者,不是开发者,既然要这么用,这么用能实现,那代码就这样码吧。大家都这么码,这么码也不错,对吧。加油,年轻人!!!

/// <summary>
        /// 获取登录用户
        /// </summary>
        /// <returns></returns>
        public Users CurrentUser
        {
    
    
            get
            {
    
    
                return ByteConvert.GetObject<Users>(HttpContext.Session.Get("CurrentUser"));
            }
        }

猜你喜欢

转载自blog.csdn.net/qq_42799562/article/details/110261785