我在这里遗漏了什么,或者这是CookieContainer中的错误?
我正在向容器中添加3个cookie,然后我为2个URL调用GetCookieHeader函数:
CookieContainer cc = new CookieContainer();
cc.Add(new Cookie("Cookie1", "1", "/a", "test.com"));
cc.Add(new Cookie("Cookie2", "2", "/a/0/", "test.com"));
cc.Add(new Cookie("Cookie3", "3", "/a/1/", "test.com"));
var result1 = cc.GetCookieHeader(new Uri("http://test.com/a/1/list"));
Assert.AreEqual("Cookie3=3; Cookie1=1", result1);
var result2 = cc.GetCookieHeader(new Uri("http://test.com/a/0/list"));
Assert.AreEqual("Cookie2=2; Cookie1=1", result2);
Run Code Online (Sandbox Code Playgroud)
问题是抛出异常的最后一个断言,因为返回的头只是"Cookie2 = 2".我没有看到为什么在那里省略Cookie1 cookie的原因 - 根据RFC6265它应该返回两个类似于上面第一个断言的cookie,不应该吗?
几句话:
cookie都在容器中,因此不是添加问题而是GetHeader函数.
添加4,5等cookie时,此行为保持不变:只有与最后添加的cookie匹配的路径才会包含基本路径的cookie!
删除路径中的所有"a"并仅使用"/","/ 0 /"和"/ 1 /"作为3个cookie的路径和" http://test.com/1/list " 时,行为会发生变化断言网址中的" http://test.com/0/list ").所有断言然后成功 - 我期望与"a"相同的行为!
PS:让我从规范中添加相关部分:
如果至少满足下列条件之一,请求路径路径将匹配给定的cookie路径:
- cookie路径和请求路径是相同的.
- cookie-path是请求路径的前缀,cookie路径的最后一个字符是%x2F("/").
- cookie-path是请求路径的前缀,而cookie路径中未包含的请求路径的第一个字符是%x2F("/")字符.
所以对我来说这显然是一个错误......?