2010-12-22 113 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