我将多次使用我在数据库中的集合,我想将它存储在Session变量中,所以每次我想要访问该集合时我都不需要读取数据库(我接受建议)如果你有更好的想法,而不是使用会话变量)。在Asp.Net MVC中,它非常简单,只需将集合分配给变量,但在ASP.net Core MVC中,即使我使用.net Framework不同,我也做了我需要做的配置在Startup.cs
中,问题是ASP.net Core中的Session只实现了这些方法(这是一个取自here的例子):
public IActionResult Index()
{
HttpContext.Session.SetString("Name", "Mike");
HttpContext.Session.SetInt32("Age", 21);
return View();
}
他们show you示例了解如何实现扩展方法以在boolean
变量中存储Session
类型。但是,如果我想存储一个集合呢?我怎么能这样做?我们假设我有一个名为Person
的表格,其中包含name
,age
等字段,我希望将Person
个对象存储在一个会话变量,我该怎么做?
答案 0 :(得分:2)
对于应用程序范围的缓存(所有用户的值相同),请使用缓存,例如MemoryCaching
答案 1 :(得分:2)
如果你想在Session中存储复杂的对象,你可以这样做 -
public static class SessionExtensions
{
public static void SetObjectAsJson(this ISession session, string key, object value)
{
session.SetString(key, JsonConvert.SerializeObject(value));
}
public static T GetObjectFromJson<T>(this ISession session, string key)
{
var value = session.GetString(key);
return value == null ? default(T) : JsonConvert.DeserializeObject<T>(value);
}
}
要存储复杂对象,您可以这样做 -
var obj= new ComplexClass();
HttpContext.Session.SetObjectAsJson("SessionVariable1", obj);
回读这个 -
var obj= HttpContext.Session.GetObjectFromJson<ComplexClass>("SessionVariable1");
看看这是否有帮助。