NetFreamWork 升级到NetCore、Net6\Net7\Net8等,关于Session的改造。

**

NetFreamWork 升级到NetCore、Net6\Net7\Net8等,关于Session的改造。

**

思路:session还需要用不?是否可以用其他代替。在本项目中,因为特殊原因,不能代替,所以还是只能用session。
既然不能代替,那就要使改造量最小。

开始改造:

首先写一个SessionHelper是少不了的:

   public class SessionHelper
    {
        private readonly IHttpContextAccessor _httpContextAccessor;

        public SessionHelper(IHttpContextAccessor httpContextAccessor)
        {
            _httpContextAccessor = httpContextAccessor;
        }

        public void SetSessionValue(string key, byte[] value)
        {
            var httpContext = _httpContextAccessor.HttpContext;
            if (httpContext != null && httpContext.Session != null)
            {
                httpContext.Session.Set(key, value);
            }
        }
        public void SetSessionValue_string(string key, string value)
        {
            var httpContext = _httpContextAccessor.HttpContext;
            if (httpContext != null && httpContext.Session != null)
            {
                byte[] byteArray = Encoding.UTF8.GetBytes(value);
                httpContext.Session.Set(key, byteArray);
            }
        }
        public byte[] GetSessionValue(string key)
        {
            var httpContext = _httpContextAccessor.HttpContext;
            if (httpContext != null && httpContext.Session != null && httpContext.Session.TryGetValue(key, out byte[] value))
            {
                return value;
            }
            return null;
        }

        public string GetSessionValue_String(string key)
        {
            var httpContext = _httpContextAccessor.HttpContext;
            if (httpContext != null && httpContext.Session != null && httpContext.Session.TryGetValue(key, out byte[] value))
            {
                string result = Encoding.UTF8.GetString(value);
                return result;
            }
            return "";
        }

        public void RemoveSessionValue(string key)
        {
            var httpContext = _httpContextAccessor.HttpContext;
            if (httpContext != null && httpContext.Session != null)
            {
                httpContext.Session.Remove(key);
            }
        }
    }
}

这里为什么要这样操作,道理很简单。因为在Net8中,存进去的是byte数组。但是在老项目中,存的最多的就是string类型,如果是对象怎么办,麻烦用JsonConvert序列化一下。
在这里插入图片描述

第二部:不要忘记program.cs 中启用 :app.UseSession();

app.UseSession();

第三步:使用


private SessionHelper _SessionHelper;

//注入
public TrainController(SessionHelper sessionHelper)
{
    _SessionHelper = sessionHelper;
}

//设置
_SessionHelper.SetSessionValue("key",byte[]);//为了方便,改造了一下,如下。
_SessionHelper.SetSessionValue_string("key","序列化后的对象字符串");//保存对象,当然也可以是单纯的字符串。

//获取
string jsonObj = _SessionHelper.GetSessionValue("key");
var jsonStr = _SessionHelper.GetSessionValue_String("key")

//移除session
_SessionHelper.RemoveSessionValue("key");

OK了,喜欢就:收藏+关注,后期还有持续更新。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值