C#中如何从Cookie列表中获取前缀为__RequestVerificationToken_的Cookie索引
解决方案
你不需要刻意获取目标Cookie的索引,直接通过固定前缀筛选即可,之前的写法报错是因为IndexOf方法本身不支持传入lambda表达式作为匹配条件。
最优实现(无需索引)
建议直接摊平所有Cookie后做前缀匹配,既规避了索引顺序不确定的问题,也能减少不必要的重复调用:
var headers = actionContext.Request.Headers; // 一次性获取所有Cookie,避免多次调用GetCookies产生额外开销 var allCookies = headers.GetCookies() .SelectMany(cookieHeader => cookieHeader.Cookies) .ToList(); // 用StartsWith做前缀匹配,比Contains精准度更高,避免误匹配 var targetCookie = allCookies.FirstOrDefault(c => c.Name.StartsWith("__RequestVerificationToken_")); if (targetCookie != null) { // 可直接获取完整Cookie名称和对应值 string fullCookieName = targetCookie.Name; string cookieValue = targetCookie.Value; // 此处补充你的业务逻辑 }
如果你确实需要获取索引
如果业务场景必须拿到索引位置,可以使用FindIndex方法实现:
int targetIndex = allCookies.FindIndex(c => c.Name.StartsWith("__RequestVerificationToken_")); // 索引大于等于0说明存在匹配的Cookie if (targetIndex >= 0) { var targetCookie = allCookies[targetIndex]; // 后续逻辑 }
优化说明
- 调用
SelectMany可以直接把多层嵌套的Cookie集合摊平为一维集合,不需要处理CookieHeader和内层Cookie的两层索引 - 用
StartsWith代替Contains做匹配,避免误匹配到名称中间包含目标字符串的非预期Cookie - 仅调用一次
GetCookies,减少重复计算开销
内容的提问来源于stack exchange,提问作者ANEES
相关产品推荐
相关产品推荐

