在.net 4.8中,我们使用的HttpContext
与类似
HttpContext.Current.Session["Settings"]) as List<UserSettings>
但在.net核心中,它给出了一个错误:无法将字符串转换为列表。
_accessor.HttpContext.Session.GetString("Settings")) as List<UserSettings>
在.net Core中,必须序列化所有会话数据才能启用分布式缓存场景。复杂类型必须由用户使用另一种机制(如JSON(进行序列化。
添加以下扩展方法来设置和获取可序列化对象:
public static class SessionExtensions
{
public static void Set<T>(this ISession session, string key, T value)
{
session.SetString(key, JsonConvert.SerializeObject(value));
}
public static T Get<T>(this ISession session, string key)
{
var value = session.GetString(key);
return value == null ? default(T) :
JsonConvert.DeserializeObject<T>(value);
}
}
更改代码以使用上述扩展方法。
List<Settings> settings = _accessor.HttpContext.Session.Get<List<Settings>>("Settings")
参考:https://learn.microsoft.com/en-us/aspnet/core/fundamentals/app-state?view=aspnetcore-2.2
为什么不像在这里一样先获取字符串:_accessor.HttpContext.Session.GetString("设置"((并将其保存到一个变量中,然后初始化一个类型字符串列表,然后将其添加到其中?