2010-12-22 83 views
5

我正在尝试做一些简单的事情,我已经看过通过网络的例子,我不知道我在做什么错 这是一个单元测试, m做测试一些功能,稍后将由一些不同的设备执行
基本上我创建了一个webrequest到我的网站,它返回一组cookie,我们稍后需要
然后我想创建一个新的webrequest ,使用从第一个响应返回的cookie,但是当我在读这些信息,饼干都是空
HttpWebRequest饼干没有设置

var request = (HttpWebRequest)WebRequest.Create("http://localhost/bla"); 
request.ContentType = "application/x-www-form-urlencoded"; 
request.Method = "GET"; 

request.CookieContainer = new CookieContainer(); 
request.CookieContainer.Add(originalResponse.Cookies); // originalResponse.Cookies has several cookies needed by "bla" 
var response = request.GetResponse(); 

在肛门疗法的地方......(里面的“喇嘛”)

HttpContext.Current.Request.Cookies // this is empty 

回答

11

好的,发现发生了什么 问题是我们不能只设置cookiecontainer从响应中获取cookie,因为这是一个新的请求,我们需要设置cookie属于的域(以及)。网不承担域是从URI Request对象的一个​​)

所以,我们需要做的是这样的设置cookie时:

request.CookieContainer = new CookieContainer(); 
request.CookieContainer.Add(new Uri("http://localhost"), originalResponse.Cookies); 

正如另注,我在设置Cookie时遇到了Path问题..得到了“The'Path'=/MyApp部分的错误该cookie无效“。我解决这个问题的方法是在添加它们(并使它们在整个域中有效)之前将cookies的路径设置为无。

for (int i = 0; i < originalResponse.Cookies.Count; i++) 
    { 
     originalResponse.Cookies[i].Path = String.Empty; 
    } 
1

你试过考虑使用HTTP检查工具的请求头直接或甚至试过吗?

originalResponse.Cookies是否填充了数据?收集和传出请求的域是否相同?

+0

我正在尝试使用小提琴来查看发生了什么。然而,由于某种原因,提琴手不捕获请求(因为它直接到iis)。试图解决这个:) 域是一样的,originalResponse.Cookies填充(它在代码注释中) – 2010-12-22 09:38:32

+1

好的,cookie不会在请求中设置。然而,CookieContainer变量有Cookie。有任何想法吗? – 2010-12-22 09:57:02