**
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了,喜欢就:收藏+关注,后期还有持续更新。