不知道各位伙伴在学习.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确实就是这么简单,可是使用起来可不是这么简单哦!简单的String、Int来记住和从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难道就只会用来记住string、Int,简单的类型?显然是不可能的,.NET Core的Session比较烦人的是,当我使用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"));
}
}