.NET Core 8中Cookie值自动编码问题:a,b变为a%2cb
问题解答
这不是.NET Core 8的Bug,而是框架遵循HTTP标准的行为差异。
原因说明
.NET Framework对Cookie值的编码规则较为宽松,允许直接存储逗号这类特殊字符;而.NET Core(包括8.x版本)严格遵循RFC 6265标准,该标准规定Cookie值不能包含逗号、分号、空格等分隔符,因此框架会自动对这类字符进行URL编码,将逗号,转换为%2cb。
解决方案
方案1:接受编码结果(推荐)
浏览器在读取Cookie值时会自动进行URL解码,因此前端获取到的实际值仍是a,b,不会影响业务逻辑,这是符合标准的常规做法。
方案2:自定义编码逻辑(不推荐,存在兼容性风险)
如果业务场景确实需要在Cookie中存储未编码的逗号,可以通过CookieOptions的Encode属性自定义编码逻辑,跳过对逗号的编码:
var cookieValue = "a,b"; var cookieOptions = new CookieOptions { Expires = DateTime.Now.AddYears(1), Secure = true, Encode = value => value // 直接返回原始值,不进行编码 }; HttpContext.Response.Cookies.Append("test", cookieValue, cookieOptions);
⚠️ 注意:这种做法违反RFC标准,可能导致部分浏览器、代理服务器无法正确解析Cookie,存在兼容性风险,仅在特殊场景下使用。
内容的提问来源于stack exchange,提问作者Saurav Yadav
相关产品推荐
相关产品推荐

