【问题标题】:How to create session of object value in asp.net core version 2.2.0?如何在 asp.net core 2.2.0 版本中创建对象值的会话?
【发布时间】:2019-07-05 01:06:46
【问题描述】:

在 Microsoft.AspNetCore.Session 2.2.0 版中如何创建对象值的会话。 我尝试阅读各种文章,但是当我尝试应用相同的文章时,它给了我错误,因为没有像“SetString”那样的重载。

public static class SessionHelper
    {
        public static void SetObjectAsJson<T>(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);
        }
    }

【问题讨论】:

    标签: session asp.net-core session-state


    【解决方案1】:

    在 Asp.Net Core 中,除了设置和获取会话字符串之外,您还必须将 SessionMiddleware 添加到管道中,在您的 startup.cs 文件中的 Configure 方法中的 app.UseMvc() 之前执行此操作 app.UseSession()。之后,在您的 ConfigureServices 方法中,添加以下服务。

    services.AddSession(options =>
      {
          //Replace {mins} with the time you want, usually around 20-30.
          options.IdleTimeout = TimeSpan.FromMinutes({mins});               
      });
    

    然后您可以继续使用 SessionHelper 类。 另外你的类的名称是错误的,它应该被称为 SessionExtensions 而不是 SessionHelper,也许这就是你的扩展没有注册到 HttpContext.Session 的原因。 希望这会有所帮助。

    【讨论】:

    • 我可以在业务层创建“会话扩展”类吗?或者它需要是 Web 解决方案。感谢您帮助我,我实际上使用的是您上面提到的相同代码,唯一的问题是我创建了类名称错误,地点错误。
    • 是的,您可以单独编写扩展方法。您所要做的就是在您的控制器或视图中添加该方法的指令,无论您想要获取或设置会话对象。如果您在此之前从未编写过扩展方法,link 可以帮助您。编码愉快!
    • 我无法在不同的控制器上获取会话值。
    猜你喜欢
    • 2020-06-15
    • 1970-01-01
    • 1970-01-01
    • 2016-06-29
    • 1970-01-01
    • 2017-09-27
    • 2021-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多