调用Add方法时出现异常。Cookie的某一部分无效。

10
我正在使用 System.Net.CookieContainerAdd 方法。多年来一直运行良好,但突然出现以下错误信息:

Exception calling "Add" with "2" argument(s): "The 'Value'='321,386,%2F%3Fa%3D1,http%3A%2F%2Fwww.xxxx.com%2Fpremium%2Fmoney' part of the cookie is invalid."

我是在添加从网页返回的cookie。网页的原始头部如下:
...
_chartbeat_uuniq=1;
_chartbeat5=321,386,%2F%3Fa%3D1,http%3A%2F%2Fwww.xxx.com%2Fpremium%2Fmoney;
gs_p_GSN-375009-Z=0;
...

什么是cookie值的问题?是逗号的问题吗?
2个回答

9

你应该对cookie的值进行编码。最好的方法是使用UrlEncode点击这里查看更多。

HttpServerUtility.UrlEncode

我曾经考虑过这个问题,但是Cookie的值看起来已经进行了URL编码。 - Old Geezer
1
也许你应该对你所拥有的进行UrlDecode,然后再次进行编码。 - Andre Pena
1
我打开了Fiddler2,发现IE和Chrome对逗号都很满意。只有CookieContainer类有些困难。 - Old Geezer

0
根据Microsoft文档,Cookie的值参数不得为空引用(Visual Basic中的Nothing)。分号(";")和逗号(",")字符被保留,除非将值参数中的字符串括在双引号中,否则不能传递这些字符。
以下代码将抛出异常。
System.Net.Cookie cookie = new System.Net.Cookie("contoso", "123,456", "", "contoso.com");
new CookieContainer().Add(cookie);

然而,如果你在值的开头和结尾加上双引号",代码就会通过。
System.Net.Cookie cookie = new System.Net.Cookie("contoso", "\"123,456\"", "", "contoso.com");
new CookieContainer().Add(cookie);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接