使用C#和.NET 6处理Cookie值中的逗号问题
当第三方Cookie值包含连续逗号(示例:110, IN, ABC, X, Y,,,,,),使用ASP.NET的_httpContextAccessor.HttpContext.Request.Cookies["key"]读取会丢失部分内容——这是因为ASP.NET默认将逗号视为多个Cookie的分隔符,而第三方Cookie未按规范对含逗号的值进行引号包裹,导致解析错误。
由于无法修改第三方Cookie的编码方式,最可靠的解决办法是直接读取原始请求头并手动解析目标Cookie值:
- 获取原始Cookie请求头内容:
var rawCookieHeader = _httpContextAccessor.HttpContext.Request.Headers["Cookie"].ToString();
- 手动解析目标Cookie的完整值:
实现一个简单的解析方法,跳过默认的Cookie分割逻辑,直接提取对应键的完整值:
string GetRawCookieValue(string rawCookie, string targetKey) { var cookieSegments = rawCookie.Split(';', StringSplitOptions.RemoveEmptyEntries); foreach (var segment in cookieSegments) { var trimmedSegment = segment.Trim(); if (trimmedSegment.StartsWith($"{targetKey}=", StringComparison.OrdinalIgnoreCase)) { // 截取等号后的所有内容,保留原始的逗号和空值部分 return trimmedSegment.Substring(targetKey.Length + 1); } } return null; } // 调用示例 var fullCookieValue = GetRawCookieValue(rawCookieHeader, "key");
这种方式直接从原始HTTP头中提取数据,不会被默认解析逻辑干扰,能完整保留Cookie的所有原始内容,包括末尾的连续逗号。
内容的提问来源于stack exchange,提问作者Sombir Kumar
相关产品推荐
相关产品推荐

