首页 > 解决方案 > 如何在 asp.net core 中使用删除 Json 对象

问题描述

我正在尝试在会话中删除序列化为 Json 对象的产品列表,但我不知道如何去做。基本上,一旦用户按下取消订单按钮,我希望能够删除产品列表。

这是我最初分别设置和序列化会话字符串和 Json 对象的位置和方式


public IActionResult OrderProduct(){

    ProductViewModel productViewModel = new ProductViewModel();

    return View(productViewModel);
}

[HTTPPost]
public IActionResult OrderProduct(ProductViewModel productViewModel){

    Product product  = new Product();
    product.Id = productViewModel.Id;

    List<Product> products = new List<Product>();
    products.Add(product);

    HttpContext.Session.SetString("SessionProducts", JsonConvert.SerializeObject(products));
    returnToRedirect("ConfirmOrder");
}

[HTTPPost]
public IActionResult ConfirmOrder(){

var products= JsonConvert.DeserializeObject<List<Product>>(HttpContext.Session.GetString("SessionProducts"));

    foreach(var product in products){
       _productRepo.CreateOrder(product) //stores product in the database
    }

return RedirectToAction("OrderSummary");

}

一旦用户单击取消订单按钮,我将他们重定向到下面的这个 HTTPGET Action 方法。在这里,我希望能够删除会话和 Json 对象,以便用户可以重新开始创建新的产品订单

public IActionResult UserMenu(){
    if (HttpContext.Session.GetString("SessionProducts") != null){
/*
    dynamic products= JsonConvert.DeserializeObject<List<Product>>(HttpContext.Session.GetString("SessionProducts"));
            JObject jObject = JObject.Parse(products);
            jObject.RemoveAll();
*/
    HttpContext.Session.Remove("SessionProducts");
    }
    return View();
}

问题是它HttpContext.Session.Remove("SessionProducts")没有做我认为它会做的事情(即删除会话)。我知道这一点是因为当我尝试将产品列表保留在我的数据库中时,它会保留应该删除的产品和新添加的产品。我现在知道我HttpContext.Session.Remove("SessionProducts")不一定要删除会话,而是删除密钥字符串。但是,问题不是我如何删除会话和 json 对象?我如何以正确的方式完成这项工作?

标签: c#asp.net-core-mvcsession-cookieshttpcontext

解决方案


推荐阅读