首页 > 解决方案 > ASP.NET Core - 会话未保存

问题描述

我试图在 ASP.NET Core 中保存我的会话,但它没有得到保存。

我查看了其他答案,建议更改 CookiePolicyOptions 并且到目前为止没有任何效果。我有另一个代码完全相同的项目(大概),它在那里工作,但在这个项目中没有。

在我的控制器中,我有:

    [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);
    }

我有一个带有扩展方法的类:

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);
    }
}

启动类:

    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();

我检查了我的会话。会话确实存在,但每次 PlanCartList 的计数为 1 并且以前的项目都丢失了。

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

标签: sessionasp.net-core

解决方案


推荐阅读