我已经确认 .NET 3.5 中的行为与 .NET 4.0 不同。使用以下代码进行测试:
Uri sourceUri = new Uri(@"http://www.html-kit.com/tools/cookietester/");
WebClientEx webClientEx = new WebClientEx();
webClientEx.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
webClientEx.UploadString(sourceUri, "cn=MyCookieName&cv=MyCookieValue");
var text = webClientEx.DownloadString(sourceUri);
var doc = new HtmlAgilityPack.HtmlDocument();
doc.Load(new MemoryStream(Encoding.ASCII.GetBytes((text))));
var node = doc.DocumentNode.SelectNodes("//div").Single(n => n.InnerText.StartsWith("\r\nNumber of cookies received:"));
Debug.Assert(int.Parse(node.InnerText.Split(' ')[4]) == 1);
当然,这并不能回答您的问题;但我看不出为什么会有不同的行为,只是说它可能已在 .NET 4.0 中修复,并且该修复尚未放入 .NET 3.5 或更早版本中。
我尝试了类似的事情HttpWebRequest
并遇到了同样的问题(适用于 4,但不是之前):
HttpWebRequest webreq = ((HttpWebRequest) (WebRequest.Create(sourceUri)));
CookieContainer cookies = new CookieContainer();
var postdata = Encoding.ASCII.GetBytes("cn=MyCookieName&cv=MyCookieValue");
webreq.CookieContainer = cookies;
webreq.Method = "POST";
webreq.ContentLength = postdata.Length;
webreq.ContentType = "application/x-www-form-urlencoded";
Stream webstream = webreq.GetRequestStream();
webstream.Write(postdata, 0, postdata.Length);
webstream.Close();
using (WebResponse response = webreq.GetResponse())
{
webstream = response.GetResponseStream();
using (StreamReader reader = new StreamReader(webstream))
{
String responseFromServer = reader.ReadToEnd();
var doc = new HtmlAgilityPack.HtmlDocument();
doc.Load(new MemoryStream(Encoding.ASCII.GetBytes((responseFromServer))));
var node =
doc.DocumentNode.SelectNodes("//div").Single(n => n.InnerText.StartsWith("\r\nNumber of cookies received:"));
Debug.Assert(int.Parse(node.InnerText.Split(' ')[4]) == 1);
}
}
HttpWebRequest
因此, (WebClient
使用)似乎存在问题。这可能是新的,因为我已经看到人们在 4.0 发布之前使用这样的代码(可能在 3.50 之前,他们说它有效。
如果情况紧急,我建议联系 Microsoft 支持。如果您有 MSDN 许可证,以下链接将详细说明如何使用随附的 MSDN 支持票提出支持请求:http: //msdn.microsoft.com/en-us/subscriptions/bb266240.aspx 如果您没有 MSDN您可以在此处详细联系支持: https: //support.microsoft.com/oas/default.aspx?Gprid=8291&st=1&wfxredirect=1&sd=gn
如果它不那么紧急,那么您可能会在http://connect.microsoft.com/VisualStudio上记录问题,以查看您是否得到解决方法的响应。