Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core 如何在asp.net core 3.1中的同一会话中设置不同的通用列表值_Asp.net Core_Session - Fatal编程技术网

Asp.net core 如何在asp.net core 3.1中的同一会话中设置不同的通用列表值

Asp.net core 如何在asp.net core 3.1中的同一会话中设置不同的通用列表值,asp.net-core,session,Asp.net Core,Session,我正在运行一个asp.net core 3.1 MVC应用程序,其中我使用了多个报告页。 对于我存储在同一会话中的每个报表数据,该会话包含不同的通用列表 e、 g:报表1在列表模型中有数据,我在Session.set(“AllReportData”,model)中设置了这些数据 对于与上述相同的其他报表,请在同一会话会话中设置另一个通用列表model2(“AllReportData”,model2) 当用户访问第二个报告页面时,我使用了一些ajax调用使该会话为空 但是,当我以前像这样将这个会话

我正在运行一个asp.net core 3.1 MVC应用程序,其中我使用了多个报告页。 对于我存储在同一会话中的每个报表数据,该会话包含不同的通用列表

e、 g:报表1在列表模型中有数据,我在Session.set(“AllReportData”,model)中设置了这些数据

对于与上述相同的其他报表,请在同一会话会话中设置另一个通用列表model2(“AllReportData”,model2)

当用户访问第二个报告页面时,我使用了一些ajax调用使该会话为空

但是,当我以前像这样将这个会话设置为null:session.set(“AllReportData”,null)时,它会抛出错误,就像要求使用相同的通用列表类型转换来使会话为null一样

但假设在应用程序中我有100多个报告,在这种情况下,我如何知道这个会话包含什么样的泛型列表类型使其为空


请根据上述场景建议正确的方法。

在asp.net core 3.1中配置SessionExtension,如下所示:

using Microsoft.AspNetCore.Http;
using System.Text.Json;

public static class SessionExtensions
{
    public static void SetModel(this ISession session, string key, object value)
    {
        session.SetString(key, JsonSerializer.Serialize(value));
    }

    public static T GetModel<T>(this ISession session, string key)
    {
        var value = session.GetString(key);
        return value == null ? default : JsonSerializer.Deserialize<T>(value);
    }
}
结果:

更新:

如果没有类型转换,则无法调用GetModel方法。因为如果将复杂模型传递给会话,则只能在对其进行反序列化时读取该模型。默认的JsonSerializer需要指定类型来告诉它如何进行反序列化

对于您的场景,如果您只想检查会话是否为null,则可以将对象作为类型传递:

var data = HttpContext.Session.GetModel<object>("AllReportData");
var data=HttpContext.Session.GetModel(“AllReportData”);

正如您所建议的,SetModel方法可以很好地将会话设置为null,但正如我在附加的屏幕截图中看到的,在设置会话null之后,下一行GetModel方法使用类型转换来检查会话值是否为null。但是正如我上面提到的,我做了一个ajax调用,使每个报告请求的会话为空。所以我不知道这节课有什么类型的排版。如果我在没有使用typecast的情况下使用GetModel检查make session null:那么我可以看到here变量仍然包含该值,请检查它并提出建议。Hi@V.Prasad,如果您想在没有typecast的情况下在Seision中获取模型,这是不可能的。您需要知道默认的JsonSerializer必须指定一个类型,然后您可以正确地反序列化。如果您只是想检查会话是否有值,只需传递一个对象,如我的更新答案。我可以在这里获取关于会话的信息,它包含什么类型的信息?e、 g:此会话包含用户类型还是产品类型。在这里,用户或产品与模型相关。请建议。
var data = HttpContext.Session.GetModel<object>("AllReportData");