【问题标题】:Asp.Net core 6 session keysAsp.Net core 6 会话密钥
【发布时间】:2022-02-17 16:15:14
【问题描述】:

我的项目在 .NET framework 4.8 上运行,然后我将其迁移到 .NET 6。每当我需要从 Session 访问特定属性时,我都会使用:

public static bool SIMInside
        {
            get
            {
                return (bool)HttpContext.Current.Session["SIMInside"];
            }
            set
            {
                HttpContext.Current.Session["SIMInside"] = value;
            }
        }

如何在 Asp.Net core 6 中实现这一点?我知道我需要在Program.cs 中添加builder.Services.AddHttpContextAccessor();,然后注入到所需的位置。 我试过但没有用:

public static bool SIMInside
        {
            get
            {
                return _contextAccessor.HttpContext.Session.Get("SIMInside");
            }
            set
            {
                _contextAccessor.HttpContext.Session.Set("SIMInside", value);
            }
        }

在这种情况下,Get 返回byte[] 数组或Set 也需要byte[] 数组

【问题讨论】:

  • 默认方法接受一个序列化对象并返回一个序列化对象。如果您想使用其他方法,还有另外两种方法:SetString、SetInt32

标签: c# session .net-6.0 asp.net-core-6.0


【解决方案1】:

与经典 ASP.NET 应用程序相比,ASP.NET Core 使用会话的方式不同。

很遗憾,您不能再在其中存储复杂的对象。为了存储对象,它被转换为 JSON 并存储为字符串。稍后,将其作为字符串检索并反序列化为原始对象。

在您的情况下,您可以使用 SetInt32 and GetInt32 存储和检索 1 为真,0 为假,然后解析该值。

Convert.ToBoolean(session.GetInt32(“SIMInside”));

session.SetInt32(“SIMInside”, Convert.ToInt32(value));

别忘了启用app.UseSession(); 才能使用会话。

【讨论】:

  • 谢谢!你的建议很有魅力。
猜你喜欢
  • 2022-08-17
  • 2017-03-04
  • 1970-01-01
  • 2017-02-14
  • 2018-03-17
  • 1970-01-01
  • 2017-11-20
  • 2021-06-01
  • 2017-08-12
相关资源
最近更新 更多