如何将Cookie添加到WebRequest?

我试图对一些代码进行unit testing,我需要替换它:

HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create( uri ); httpWebRequest.CookieContainer = new CookieContainer(); 

  WebRequest webRequest = WebRequest.Create( uri ); webRequest.CookieContainer = new CookieContainer(); 

基本上,如何在不使用HttpWebRequest的情况下将cookie添加到请求中?

根据您的意见,您可以考虑编写扩展方法 :

 public static bool TryAddCookie(this WebRequest webRequest, Cookie cookie) { HttpWebRequest httpRequest = webRequest as HttpWebRequest; if (httpRequest == null) { return false; } if (httpRequest.CookieContainer == null) { httpRequest.CookieContainer = new CookieContainer(); } httpRequest.CookieContainer.Add(cookie); return true; } 

然后你可以有如下代码:

 WebRequest webRequest = WebRequest.Create( uri ); webRequest.TryAddCookie(new Cookie("someName","someValue")); 

WebRequest是一个没有CookieContainer属性的抽象类。 此外,您不能使用Headers集合(未实现的exception),因此任何类似webRequest.Headers.Add(“Cookie”,“…”)的尝试都将失败。

抱歉,您没有机会在WebRequest中使用Cookie。

坚持使用HttpWebRequest并使用其Headers系列添加/编辑您喜欢的任意数量的cookie!

试试这样的事情:

 HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.contoso.com/default.html"); request.CookieContainer.Add(new Cookie("ConstoCookie", "Chocolate Flavour")); 

dlev的答案最终起作用了,但我在实现解决方案时遇到了问题(“参数'{0}’不能是空字符串。”),所以我决定编写完整的代码以防其他人有类似的问题。

我的目标是将html作为字符串,但我需要将cookie添加到Web请求中。 这是使用cookie下载字符串的function:

 public static string DownloadString(string url, Encoding encoding, IDictionary cookieNameValues) { using (var webClient = new WebClient()) { var uri = new Uri(url); var webRequest = WebRequest.Create(uri); foreach(var nameValue in cookieNameValues) { webRequest.TryAddCookie(new Cookie(nameValue.Key, nameValue.Value, "/", uri.Host)); } var response = webRequest.GetResponse(); var receiveStream = response.GetResponseStream(); var readStream = new StreamReader(receiveStream, encoding); var htmlCode = readStream.ReadToEnd(); return htmlCode; } } 

我们正在使用dlev答案中的代码:

 public static bool TryAddCookie(this WebRequest webRequest, Cookie cookie) { HttpWebRequest httpRequest = webRequest as HttpWebRequest; if (httpRequest == null) { return false; } if (httpRequest.CookieContainer == null) { httpRequest.CookieContainer = new CookieContainer(); } httpRequest.CookieContainer.Add(cookie); return true; } 

这是您使用完整代码的方式:

 var cookieNameValues = new Dictionary(); cookieNameValues.Add("varName", "varValue"); var htmlResult = DownloadString(url, Encoding.UTF8, cookieNameValues);