2011-10-14 34 views
2

我能夠遍歷一個response.Headers集合,並像這樣顯示每個頭的值。如何獲取HttpResponseHeader的名稱?

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(postDest); 
//Set up the request with needed properties etc. 
HttpWebResponse response = req.GetResponse() as HttpWebResponse;  
for(int i= 0; i < response.Headers.Count; i++) 
{ 
     MessageBox.Show(response.Headers[i].ToString()); 
} 

但是我怎樣才能得到每個ResponseHeader的名稱字段名?

更新:

如果我這樣做,我能夠獲得字段名和值。

for (int i = 0; i < response.Headers.Count; i++) 
    { 
     MessageBox.Show("Field-Name is: " + response.Headers.GetKey(i).ToString() + " Value is: " + response.Headers[i].ToString()); 
    } 

回答

0

可以使用response.Headers.GetValues(response.Headers.GetKey(i))

+0

感謝krakover。如果你想用更新更新你的答案給我的更新,我會選擇正確的方向。 –

0
foreach (HttpWebResponse v in response.Headers) 
{ 
    v.Headers.Keys.ToString();  
} 
0

你可以這樣做:

foreach (var key in response.Headers.AllKeys) 
{ 
    Console.WriteLine(response.Headers[key]); 
} 
0
var values = response.Headers.GetValues("Key") 

var values = Enumerable.Empty<string>(); 
if (response.Headers.TryGetValues("Key", out values)) 
{ 
    // check values 
} 
1

對於合作完整性,我應該指出,你可以在WebHeaderCollection對象本身上調用.ToString()。 (Response.Headers.ToString())。現在我真的不建議這一點,因爲在法正式MSDN comment說:

此API支持.NET Framework基礎結構,不 適合直接在代碼中使用。

但是,通過ILSpy查看代碼,它並沒有做任何事情,只是在基於頭文件的StringBuilder中建立名稱/值行的列表。它確實排除了任何未命名的標題,但我認爲這些非常罕見。有趣的是,他們沒有去搗亂Obsolete編譯器屬性(可能是爲了通過他們的單元測試?)所以它可能是安全的使用。但是,如果您擔心這一點,我會建議在問題中發佈的解決方案,該解決方案使用直接索引。請注意,直接索引比接受的答案中的方法更快,因爲它不依賴於字符串鍵或內部哈希表(不是性能可能是該領域的主要關注點)。