Мне что-то здесь не хватает или это ошибка в CookieContainer?
Я добавляю 3 файла cookie в контейнер, а затем вызываю функцию GetCookieHeader для 2 URL-адресов:
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);
Проблема заключается в последнем утверждении, которое вызывает исключение, поскольку возвращаемый заголовок имеет значение «Cookie2 = 2». Я не вижу причин, по которым cookie1 cookie здесь опущен - согласно RFC6265 он должен возвращать два cookie, аналогичные первому утверждению выше, не так ли?
Пара замечаний:
Все файлы cookie находятся в контейнере, поэтому проблема не в добавлении, а в функции GetHeader.
Это поведение остается неизменным при добавлении 4, 5 и т. Д. Файлов cookie: только путь, соответствующий последнему добавленному файлу cookie, будет включать файл cookie для базового пути!
Поведение меняется при удалении всех «a» в путях и использовании только «/», «/ 0 /» и «/ 1 /» в качестве путей для 3 файлов cookie и «" и "http://test.com/0/list" в URL-адресах утверждений). Тогда все утверждения будут успешными - я ожидал бы того же поведения с «а»!
PS: позвольте мне добавить соответствующую часть из спецификации:
Путь запроса соответствует заданному пути cookie, если выполняется хотя бы одно из следующих условий:
- Путь к файлу cookie и путь запроса идентичны.
- Путь к файлу cookie является префиксом пути запроса, а последний символ пути к файлу cookie -% x2F ("/").
- Путь к файлу cookie является префиксом пути запроса, а первым символом пути запроса, не включенным в путь куки, является символ% x2F ("/").
Так для меня это явно ошибка ...?