如何循环WebHeaderCollection

时间:2011-06-22 11:42:18

标签: .net windows-mobile httpwebresponse

如何通过Windows Phone 7中的HttpWebResponse获取WebHeaderCollection以获取密钥和值?我们尝试过Enumerator.Current;有了这个,我们只得到钥匙,而不是价值。我们这样做是为了获得重定向的URL。

11 个答案:

答案 0 :(得分:31)

我认为这是一个糟糕的收藏品。

MSDN sample。我更喜欢这个:

var headers = new System.Net.WebHeaderCollection();
headers.Add("xxx", "yyy");
headers.Add("zzz", "fff");
headers.Add("xxx", "ttt");
for(int i = 0; i < headers.Count; ++i)
{
    string header = headers.GetKey(i);
    foreach(string value in headers.GetValues(i))
    {
        Console.WriteLine("{0}: {1}", header, value);
    }
}

不幸的是,没有办法在其他标题之间保留订单保留值。

P.S。 Linq风格(LINQPad

var items = Enumerable
                .Range(0, headers.Count)
                .SelectMany(i => headers.GetValues(i)
                    .Select(v => Tuple.Create(headers.GetKey(i), v))
                );
items.Dump();

答案 1 :(得分:14)

foreach(string key in resp.AllKeys)
{
string value = resp[key];
}

答案 2 :(得分:10)

在WP7 / Silverlight中我这样做。

foreach (string key in headers.AllKeys)
{
   Console.WriteLine("Header : " + key + " ---> " + headers[key]);
}

答案 3 :(得分:3)

一些C#6怎么样:)

string.Join("&", headers.AllKeys.Select(key => $"{key}={headers[key]}").ToList());

答案 4 :(得分:2)

我真的不喜欢它,当这样的特殊集合有时在.NET中存在时,不容易迭代预期的值。使事情变得不那么友好。无论如何,如果您觉得要添加扩展方法的麻烦:

// call in your main code
KeyValuePair<string, string>[] headers = webResponse.Headers.GetHeaders();

// extension: 
public static class Xtension
{
    public static KeyValuePair<string, string>[] GetHeaders(this WebHeaderCollection webHeaderCollection)
    {
        string[] keys = webHeaderCollection.AllKeys;
        var keyVals = new KeyValuePair<string, string>[keys.Length];
        for (int i = 0; i < keys.Length; i++)
            keyVals[i] = new KeyValuePair<string, string>(keys[i], webHeaderCollection[keys[i]]);
        return keyVals;
    }
}

答案 5 :(得分:2)

在Silverlight中。

如果您想逐个键和值:

foreach (string key in webHeaderCollection)
{
    var value = webHeaderCollection[key];
    // do something with key and value
}

如果您需要键和值的字典:

var dic = webHeaderCollection.AllKeys.ToDictionary(k => webHeaderCollection[k]);
foreach (var pair in MyDic)
{
    // do something with pair.Key and pair.Value
}

答案 6 :(得分:1)

当我试图找到一种从Visual Studio调试器中查看WebHeaderCollection中键值对的方法时,我从谷歌那里得到了这个问题。

简单解决方案(回想起来):Watch调试窗口中使用的WebHeaderCollection.ToString()方法将实现此目的:

webheadercollection.ToString()

所以,如果你有一个名为request的HttpWebRequest:

request.Headers.ToString()

答案 7 :(得分:1)

我的解决方案,作为扩展方法:

private static string Serialize(this System.Net.WebHeaderCollection value)
{
    var response = new System.Text.StringBuilder();
    foreach (string k in value.Keys)
        response.AppendLine(k + ": " + value[k]);
    return response.ToString();
}

答案 8 :(得分:0)

For i As Integer = 0 To Response.Headers.Count - 1
   'Response.Headers.Get(i)
Next

答案 9 :(得分:0)

如果你真的想使用扩展方法来获得标题列表作为KeyValuePair数组,你可能想要使用IEnumerable接口。

public static class WebHeaderCollectionExtensions
{
    public static IEnumerable<KeyValuePair<string, string>> GetHeaders(this System.Net.WebHeaderCollection webHeaderCollection)
    {
        string[] keys = webHeaderCollection.AllKeys;
        for (int i = 0; i < keys.Length; i++)
        {
            yield return new KeyValuePair<string, string>(keys[i], webHeaderCollection[keys[i]]);
        }
    }
}

在这种情况下,您可以轻松地迭代foreach循环:

foreach (var x in h.GetHeaders())
{
    Console.WriteLine(x.Key + ": " + x.Value);
}

答案 10 :(得分:0)

foreach(string item in response.Headers) {
  string key = item.ToString();
      if (key == "x-ng-sessionid") {
         sessionid = response.Headers[item];
         }
      }