将集合存储在会话Asp.net Core .net Framework

时间:2016-12-02 15:07:31

标签: c# asp.net-mvc asp.net-core-mvc

我将多次使用我在数据库中的集合,我想将它存储在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的表格,其中包含nameage等字段,我希望将Person个对象存储在一个会话变量,我该怎么做?

2 个答案:

答案 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");

看看这是否有帮助。