2011-10-14 30 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编译器属性(可能是为了通过他们的单元测试?)所以它可能是安全的使用。但是,如果您担心这一点,我会建议在问题中发布的解决方案,该解决方案使用直接索引。请注意,直接索引比接受的答案中的方法更快,因为它不依赖于字符串键或内部哈希表(不是性能可能是该领域的主要关注点)。