#asp.net-mvc #asp.net-core #cookies
Вопрос:
Я работаю с приложением корзины покупок. Я разработал приложение, которое поддерживает пользовательские корзины покупок с помощью файлов cookie. Он работал отлично, пока я не внес некоторые изменения в пользовательский интерфейс, и теперь он не работает, теперь я понятия не имею, что я сделал не так, потому что я сохраняю файлы cookie с помощью внутреннего кода c# без прерывания, когда интерфейс только читает эти файлы 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 lt;= 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 этого приложения, они работают отлично, но проблема в том, что со старым дизайном я больше не использую этот дизайн пользовательского интерфейса. Это один и тот же код, работающий в одном приложении, но не работающий с другим приложением с другим пользовательским интерфейсом.
Комментарии:
1. у кого-нибудь есть хоть малейшая догадка, чего мне не хватает
Ответ №1:
Вы добавили IHttpContextAccessor в контейнер зависимостей ?
services.TryAddSingletonlt;IHttpContextAccessor, HttpContextAccessorgt;();
Комментарии:
1. Услуги. AddHttpContextAccessor(); Я добавил так, иначе это дало бы мне ошибку внедрения зависимостей
2. возможно, ваш браузер заблокировал файлы cookie для этого URL-адреса, попробуйте изменить порт вашего URL-адреса
3. и еще одна вещь, когда вы вызываете GetShoppingCartFromCookies, какой httpcontext вы передаете ? ввели один или новый ?
4. Я вызываю его с базового контроллера
5. выполняет _httpContextAccessor. HttpContext содержит данные или возвращает значение null ?
Ответ №2:
Я решил свой вопрос. Проблема заключалась в том, что в основном я добавлял строку изображения base64, которая не работала. Когда я комментирую эту строку, она отлично работала, не нужно было менять какой-либо код.
public static GenericResponseDTOlt;Listlt;ShoppingCartViewModelgt;gt; GetShoppingCartList(UserProductVM model, IHttpContextAccessor _httpContextAccessor) { var shoppingcartmodel = new Listlt;ShoppingCartViewModelgt;(); 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.DeserializeObjectlt;Listlt;ShoppingCartViewModelgt;gt;(GetShoppingCartFromCookies(_httpContextAccessor)); if (shoppingcartmodel.Any(x =gt; x.RestaurantSubCategoryId == model.RestaurantSubCategoryId)) return new GenericResponseDTOlt;Listlt;ShoppingCartViewModelgt;gt; { Data = new Listlt;ShoppingCartViewModelgt;(), Status = -1, Message = "Item is alreay exists in your cart please remove and add another." }; shoppingcartmodel.Add(cartmodel); } return new GenericResponseDTOlt;Listlt;ShoppingCartViewModelgt;gt; { Data = shoppingcartmodel, Status = 1 }; }
Я прокомментировал линию ItemImage, и она работает как заклинание. Может быть, это поможет решить чью-то еще проблему.