.NET Core MVC读取JS设置的productsInCart Cookie返回null问题求助
问题原因
你遇到的productsInCart Cookie读取为null的问题由两个常见原因导致:
- 存储Cookie时未对JSON字符串做编码:JSON包含的双引号、逗号等属于Cookie值的非法字符,.NET的Cookie解析器会判定该值无效直接返回null,而你的
cartNumbers值为纯数字无特殊字符所以可以正常读取。 - 你的JS代码存在语法错误:
addItemToCart函数的闭合括号位置错误,data.push(curObj)被写在了函数作用域之外,会导致存储的Cookie值不符合预期。
修复步骤
1. 修正JS语法错误
调整addItemToCart函数的代码结构,把data.push(curObj)放到函数内部:
function addItemToCart(data, pId, quantity, curObj) { for (let obj of data) { if (obj.slNo === pId) { obj.pQty = quantity; return; } } // 放到函数内部,循环结束没找到对应商品再新增 data.push(curObj); }
2. 存储Cookie前对值做编码
修改setCookie的调用逻辑,对JSON字符串做URL编码后再存入Cookie:
// 原有逻辑:setCookie(key, value, 90); // 替换为: setCookie(key, encodeURIComponent(value), 90);
3. .NET端正确读取Cookie
注意Request.Cookies[key]返回的是Cookie对象,需要显式取Value属性,如有需要可以主动做URL解码:
// 读取时优先判断Cookie是否存在,避免空引用异常 var ProductInCart = Request.Cookies["productsInCart"] != null ? HttpUtility.UrlDecode(Request.Cookies["productsInCart"].Value) : null; var CartNumber = Request.Cookies["cartNumbers"] != null ? Request.Cookies["cartNumbers"].Value : null;
补充说明
单条Cookie的最大容量通常为4KB,如果你的购物车商品数量较多,建议改用本地存储或者后端Session存储,避免超出Cookie长度限制导致数据丢失。
内容的提问来源于stack exchange,提问作者level 1
相关产品推荐
相关产品推荐

