【发布时间】:2022-05-22 01:29:50
【问题描述】:
在下面的代码中,我有 cookie,例如:__RequestVerificationToken_LlsZQ2=Z_nK9nEK9xNmHA34qmw...,我想要 cookie 的确切名称,即 __RequestVerificationToken_LlsZQ2
var headers = actionContext.Request.Headers;
if(headers.GetCookies().Any(x => x.Cookies.Any(y => y.Name.Contains("_RequestVerificationToken_"))))
{
var tokenCookie = headers.GetCookies()
.Select(c => c[headers.GetCookies()[0].Cookies[0].Name.ToString()])
.FirstOrDefault();
}
我在headers.GetCookies()[0].Cookies[0].Name.ToString() 的帮助下获得了 cookie 的名称。但是如果我不确定 cookie 的索引,那么如何获取它的索引呢?
PS 在__RequestVerificationToken_LlsZQ2 中,__RequestVerificationToken_ 将保持原样。
我试过headers.GetCookies().IndexOf(x => x.Cookies.Any(y => y.Name.Contains("_RequestVerificationToken_"))),但它给出了错误。
【问题讨论】:
-
在我这边,名称以“.AspNetCore.Antiforgery”开头所以获取所有cookie,并遍历数组以找到以/包含它开头的那个。您可以在浏览器的检查器中查看这些内容。 (xhr 请求)
-
顺便说一句,从文档看来,名称是根据服务器路径生成的……可能是单向哈希。您可以将其设置为您喜欢的任何内容......为什么需要cookie的名称? (只是好奇)
-
是否需要 LINQ 查询?如果没有,为什么不直接使用 for 循环?
标签: c# arrays asp.net list lambda