Session ASP.NET核心-未保存会话
我正在尝试将会话保存在ASP.NET Core中,但无法保存 我看了其他答案,建议改变政策选项,但到目前为止没有任何效果。我有另一个项目使用完全相同的代码(大概),它在那里工作,但不在这个项目中 在我的控制器中,我有: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
[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()之前
?