Asp.Net Core 6 会话键

4

我曾经将我的项目运行在.NET框架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[] 数组。


默认方法接受一个序列化对象并返回一个序列化对象。如果您想使用其他内容,则有另外两种方法:SetStringSetInt32 - Eldar
1个回答

8

ASP.NET Core使用session的方式与经典的ASP.NET应用不同。

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

在您的情况下,您可以使用SetInt32 和 GetInt32 来存储和检索 1 表示 true,0 表示 false,然后解析值。

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

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

别忘了启用 app.UseSession(); 以便使用会话。


谢谢!你的建议非常有效。 - Tobias

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接