【问题标题】:Cookies problem using web application asp net core使用Web应用程序asp net core的cookies问题
【发布时间】:2021-12-07 05:25:29
【问题描述】:

我正在使用购物车应用程序。我开发了一个使用 cookie 维护用户购物车的应用程序。在我进行了一些 UI 更改之前它工作得很好,现在它不工作了我不知道我做错了什么,因为我通过 c# 后端代码维护 cookie 没有中断,前端只读取这些 cookie 并传递它们进入视图模型以显示在购物车面板上。这是我的代码

Startup.cs

            app.UseRouting();
            app.UseCookiePolicy();
            app.UseAuthentication();

将商品添加到购物车

public JsonResult AddToShoppingCart(UserProductVM model)
        {
            try
            {
                if (string.IsNullOrEmpty(model.SelectedSize))
                    return Json(new { status = false, msg = "Please select size to proceed." });
                var result = ShoppingCartHelper.GetShoppingCartList(model, _httpContextAccessor);
                if (result.Status <= 0)
                    return Json(new { status = false, msg = result.Message });
                Response.Cookies.Delete("ShoppingCart");
                Response.Cookies.Append("ShoppingCart", JsonConvert.SerializeObject(result.Data));
                return Json(new { status = true, msg = "Success! added to shopping cart." });
            }
            catch (Exception ex)
            {
                return Json(new { status = false, msg = ex.Message.ToString() });
            }
        }

从购物车中读取

public static string GetShoppingCartFromCookies(IHttpContextAccessor _httpContextAccessor)
        {
            return _httpContextAccessor.HttpContext?.Request?.Cookies["ShoppingCart"]?.ToString();
        }

一切正常,现在没有任何效果,cookie 列表中没有添加任何 cookie。这是相同的代码,我也备份了我的应用程序,当我运行该应用程序时,cookie 运行良好,但问题是它是旧设计,我不再使用那个 UI 设计。这是在一个应用程序中工作但在具有不同 UI 的另一个应用程序中工作的相同代码。

【问题讨论】:

  • 任何人都知道我错过了什么

标签: asp.net-mvc asp.net-core cookies


【解决方案1】:

您是否将 IHttpContextAccessor 添加到依赖容器中?

services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();

【讨论】:

  • services.AddHttpContextAccessor();我已经像这样添加了,否则它会给我依赖注入的错误
  • 可能是您的浏览器阻止了此网址的 Cookie,请尝试更改您的网址的端口
  • 也是另一回事,当您调用 GetShoppingCartFromCookies 时,您传递的 httpcontext 是什么?注入一个还是新的?
  • 我从基本控制器调用它
  • _httpContextAccessor.HttpContext 是否有数据或返回 null ?
【解决方案2】:

我已经解决了我的问题。问题基本上是我添加了不起作用的 base64 图像字符串。当我对这一行发表评论时,它运行良好,无需更改任何代码。

 public static GenericResponseDTO<List<ShoppingCartViewModel>> GetShoppingCartList(UserProductVM model, IHttpContextAccessor _httpContextAccessor)
        {
            var shoppingcartmodel = new List<ShoppingCartViewModel>();
            var cartmodel = new ShoppingCartViewModel
            {
                RestaurantId = model.RestaurantId,
                SubCategoryId = model.SubCategoryId,
                RestaurantSubCategoryId = model.RestaurantSubCategoryId,
                OrderGuid = Guid.NewGuid(),
                Quantity = model.Quantity,
                //ItemImage = model.ItemImage,
                SelectedSize = model.SelectedSize.Split('-')[0],
                SingleItemPrice = Convert.ToDecimal(model.SelectedSize.Split('-')[1]),
                SubCategoryName = model.SubCategoryName,
                TotalItemPrice = (model.Quantity * Convert.ToDecimal(model.SelectedSize.Split('-')[1]))
            };
            if (string.IsNullOrEmpty(GetShoppingCartFromCookies(_httpContextAccessor)))
                shoppingcartmodel.Add(cartmodel);
            else
            {
                shoppingcartmodel = JsonConvert.DeserializeObject<List<ShoppingCartViewModel>>(GetShoppingCartFromCookies(_httpContextAccessor));
                if (shoppingcartmodel.Any(x => x.RestaurantSubCategoryId == model.RestaurantSubCategoryId))
                    return new GenericResponseDTO<List<ShoppingCartViewModel>> { Data = new List<ShoppingCartViewModel>(), Status = -1, Message = "Item is alreay exists in your cart please remove and add another." };
                shoppingcartmodel.Add(cartmodel);
            }
            return new GenericResponseDTO<List<ShoppingCartViewModel>> { Data = shoppingcartmodel, Status = 1 };
        }

我已经评论了 ItemImage 行,它就像一个魅力。也许它可以帮助其他人解决问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-12
    相关资源
    最近更新 更多