Session ASP.NET核心-未保存会话

Session ASP.NET核心-未保存会话,session,asp.net-core,Session,Asp.net Core,我正在尝试将会话保存在ASP.NET Core中,但无法保存 我看了其他答案,建议改变政策选项,但到目前为止没有任何效果。我有另一个项目使用完全相同的代码(大概),它在那里工作,但不在这个项目中 在我的控制器中,我有: [HttpPost] public IActionResult AddToPlan(int mealId) { PlanCart planCart = GetPlanCart(); planCart.AddItem(mea

我正在尝试将会话保存在ASP.NET Core中,但无法保存

我看了其他答案,建议改变政策选项,但到目前为止没有任何效果。我有另一个项目使用完全相同的代码(大概),它在那里工作,但不在这个项目中

在我的控制器中,我有:

    [HttpPost]
    public IActionResult AddToPlan(int mealId)
    {
        PlanCart planCart = GetPlanCart();

        planCart.AddItem(mealId);
        SavePlanCart(planCart);

        // ALWAYS 1
        var y = planCart.returnList();

        foreach (var x in y)
        {
            var z = x; // For debug purposes
        }

        return RedirectToAction("Index");
    }

    private PlanCart GetPlanCart()
    {
        PlanCart planCart = HttpContext.Session.GetJson<PlanCart>("PlanCart") ?? new PlanCart();
        return planCart;
    }
    private void SavePlanCart(PlanCart planCart)
    {
        HttpContext.Session.SetJson("PlanCart", planCart);
    }
[HttpPost]
公共IActionResult AddToPlan(内部测量)
{
PlanCart PlanCart=GetPlanCart();
planCart.AddItem(mealId);
保存计划车(计划车);
//总是1
var y=planCart.returnList();
foreach(变量x在y中)
{
var z=x;//用于调试目的
}
返回操作(“索引”);
}
私有PlanCart GetPlanCart()
{
PlanCart PlanCart=HttpContext.Session.GetJson(“PlanCart”)??新建PlanCart();
返回计划车;
}
私有无效存储计划车(计划车计划车)
{
HttpContext.Session.SetJson(“PlanCart”,PlanCart);
}
我有一个带有扩展方法的类:

public static class SessionsExtensions
{
    public static void SetJson(this ISession session, string key, object value)
    {
        session.SetString(key, JsonConvert.SerializeObject(value));
    }
    public static T GetJson<T>(this ISession session, string key)
    {
        var sessionData = session.GetString(key);
        return sessionData == null
       ? default(T) : JsonConvert.DeserializeObject<T>(sessionData);
    }
}
公共静态类sessionExtensions
{
公共静态void SetJson(此ISession会话、字符串键、对象值)
{
SetString(key,JsonConvert.SerializeObject(value));
}
公共静态T GetJson(此ISession会话,字符串键)
{
var sessionData=session.GetString(键);
返回sessionData==null
?默认值(T):JsonConvert.DeserializeObject(sessionData);
}
}
启动类:

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseAuthentication();
        app.UseSession();

        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });

        app.UseCookiePolicy();

    }

        services.Configure<CookiePolicyOptions>(options =>
        {
            // This lambda determines whether user consent for non-essential cookies is needed for a given request.
            options.CheckConsentNeeded = context => true;
            options.MinimumSameSitePolicy = SameSiteMode.None;
        });

        services.AddSession();
        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
        services.AddMemoryCache();
public void配置(IApplicationBuilder应用程序,IHostingEnvironment环境)
{
if(env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
其他的
{
app.UseExceptionHandler(“/Home/Error”);
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseAuthentication();
app.UseSession();
app.UseMvc(路由=>
{
routes.MapRoute(
名称:“默认”,
模板:“{controller=Home}/{action=Index}/{id?}”);
});
app.UseCookiePolicy();
}
配置(选项=>
{
//此lambda确定给定请求是否需要非必要cookie的用户同意。
options.checkApprovered=context=>true;
options.MinimumSameSitePolicy=SameSiteMode.None;
});
services.AddSession();
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
services.AddMemoryCache();
我已经检查了我的会话。会话确实存在,但每次PlanCartList的计数为1时,以前的项目都会丢失


如果有人能帮助我,我将不胜感激,因为我在这里失去了理智

我没有看到你的PlanCarList,你的代码planCart planCart=GetPlanCart()中的planCart始终是一个实体而不是一个列表,因此它将始终是1。此外,你最好提供
Additem()
returnList()
函数来了解你是如何得到结果的1你是否尝试过将
app.UseCookiePolicy()放入其中的
app.UseSession()之前