有没有办法像在 Web 表单中一样对 ASP.NET Core 中的对象使用会话?

Mik*_*mos 2 c# session httpcontext asp.net-core

我有一个 Web 表单项目,我正在尝试将其转换为 ASP.NET Core。我的问题是,在网络表单中,我将一个对象保存到会话中,当我获取它时,我可以对其进行更改并保留它们。另一方面,在核心中,我通过序列化对象将其设置为会话。当我获取它并进行更改时,它不会影响会话中存储的对象。有没有办法按原样保存对象(无需序列化它),以便当我从会话中获取它并对其进行更改时,可以继续使用它而不必再次在会话中设置它?

会议是

 System.Web.HttpContext.Current.Session["object"]
Run Code Online (Sandbox Code Playgroud)

并做到了

AppHttpContext.Current.Session.GetString("object") 
Run Code Online (Sandbox Code Playgroud)

然后我将它反序列化为我想要的对象。

Ps:我使用 AppHttpContext 在控制器外部获取会话

Alm*_*ida 7

要在会话中使用对象/数组,您需要一些自定义:`

public static class SessionExtensions {
public static void SetObject(this ISession session, string key, object value)
{
    session.SetString(key, JsonConvert.SerializeObject(value));
}

public static T GetObject<T>(this ISession session, string key)
{
    var value = session.GetString(key);
    return value == null ? default(T) : JsonConvert.DeserializeObject<T>(value);
} }
Run Code Online (Sandbox Code Playgroud)

现在你可以这样设置:

var objComplex = new ComplexClass();
HttpContext.Session.SetObject("ComplexObject", objNew);
Run Code Online (Sandbox Code Playgroud)

并检索它:

var objComplex = HttpContext.Session.GetObject("ComplexObject");
Run Code Online (Sandbox Code Playgroud)