如何获取HttpResponseHeader的名称?

时间:2011-10-14 18:01:35

标签: c# httpwebrequest http-headers

我能够遍历response.Headers集合并显示每个标头的值,就像这样。

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获取名称Field-Name?

更新

如果我这样做,我可以获得字段名称和值。

    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());
    }

5 个答案:

答案 0 :(得分:2)

为了完整起见,我应该指出,您只需在.ToString()对象本身上调用WebHeaderCollection即可。 (Response.Headers.ToString())。现在我不推荐这个,因为该方法的官方MSDN comment说:

  

此API支持.NET Framework基础结构,但不支持   旨在直接从您的代码中使用。

然而,通过ILSpy查看代码,它没有做任何事情,只是根据标头在StringBuilder中构建名称/值行列表。它确实排除了任何未命名的标题,但我认为这些很少见。而且有趣的是,他们没有遇到在其上打一个过时的编译器属性的麻烦(也许是为了通过他们的单元测试?))所以它可能是安全的。但是如果你担心这个问题,我会推荐使用直接索引的问题中的解决方案。请注意,直接索引比接受的答案中的方法更快,因为它不依赖于String键或内部Hashtable(而不是性能可能是该领域的主要关注点。)

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

你可以这样做:

foreach (var key in response.Headers.AllKeys)
{
  Console.WriteLine(response.Headers[key]);
}

答案 4 :(得分:0)

var values = response.Headers.GetValues("Key")

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