如何使用C#在webapi中读取多个具有相同名称的cookie

时间:2017-08-01 19:06:29

标签: c# .net c#-4.0 asp.net-web-api httpcookie

我们有两个使用相同名称创建的Cookie。 当我迭代循环时,我总是得到第一个cookie。 有没有办法单独访问两个cookie?

        if (Request.Cookies.AllKeys.Where(x => x == "test").Count() > 1)
        {
            foreach (var cookie in Request.Cookies.AllKeys)
            {
                if (Request.Cookies[cookie].Name == "test")
                {
                    var temp = System.Web.HttpContext.Current.Request.Cookies["test"];
                    temp.Expires = DateTime.Now.AddDays(-1);
                    Response.Cookies.Add(temp);
                }
            }               
        };

2 个答案:

答案 0 :(得分:1)

当一个cookie已经存在,并且您通过添加或更新它(通过响应的Cookies集合)对其进行更新时,第二个“重复” cookie被添加到请求的Cookies集合中。这个重复的副本实际上就是您刚刚更新的副本。

尽管我没有在MSDN文档中进行检查,但我相信这很可能是设计使然。你为什么问?因为它允许您获取您的cookie的当前版本(您刚刚通过响应更新/添加的cookie),或由用户的浏览器实际发送的cookie(因此是其cookie的当前版本)。在这个时候)。

现在,使用Cookies.Get(name),Cookies [name]或您执行的方式-从头开始循环遍历键集合,然后返回第一个匹配项,将始终导致第一个匹配项cookiebeïng返回。这是用户仍然知道的cookie,因此不是您在此请求期间一直在更新的cookie。

如果要检索“当前”的cookie版本,则必须获取具有该名称的最后一个而不是第一个。您可以这样做:

int index = Array.LastIndexOf(this.HttpRequest.Cookies.AllKeys, cookieKey);

if (index != -1)
{
    result = this.HttpRequest.Cookies[index];
}

当然,如果您未在当前请求中进行更新,它也将始终返回正确的cookie。

答案 1 :(得分:0)

我们不能在特定域中拥有两个具有相同名称的cookie,并且默认情况下我们从当前域获取Cookie。所以我没有看到一个案例,你可以在上面的代码中找到两个同名的cookie。

请详细说明您的问题。