【问题标题】:How to fill a dictionary with all request headers如何用所有请求标头填充字典
【发布时间】:2017-01-24 08:10:47
【问题描述】:

当我使用此方法获得标头键名称时,我能够一一获取请求标头

private string GetHeader(string Name)
{
    IEnumerable<string> headerValues;
    if (Request.Headers.TryGetValues(Name, out headerValues))
    {
        return headerValues.FirstOrDefault();
    }
    else { return ""; }
}

但我真正想要的是获取所有请求标头并将它们存储在字典中,就像这样

Dictionary<string, string> ss = Request.Headers.ToDictionary(a => a.Key, a => a.Value); 
//this doesn't work

有人知道怎么做吗?

【问题讨论】:

    标签: c# asp.net-web-api2


    【解决方案1】:

    您已经可以枚举所有标头值,因为 Request.Headers 的类型为 HttpRequestHeadersIEnumerable&lt;KeyValuePair&lt;string, IEnumerable&lt;string&gt;&gt;&gt;

    所以值是IEnumerable&lt;string&gt;,而您的Dictionary 必须更改为

    Dictionary<string, IEnumerable<string>> ss 
           = Request.Headers.ToDictionary(a => a.Key, a => a.Value);
    

    或者如果你想坚持字符串值,你可以加入字符串枚举。

    Dictionary<string, string> ss 
           = Request.Headers.ToDictionary(a => a.Key, a => string.Join(";", a.Value));
    

    【讨论】:

    • 非常感谢!当然是 IEnuerable..我怎么会错过..谢谢分享
    • 有人能解释一下这个答案吗?简单来说。为什么这个方法(ToDictionary)需要一个表达式? Lambda 表达式在做什么?
    • @dsanchez 您正在将 IEnumerable 转换为字典。 Request.Headers 是一个 IEnumerable。 docs.microsoft.com/en-us/dotnet/api/…
    猜你喜欢
    • 1970-01-01
    • 2013-10-25
    • 2017-08-05
    • 2021-01-16
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 2013-05-30
    相关资源
    最近更新 更多