如何传递标题列表并获取键/值对?
我创建了一种类似于以下内容的方法:
public static IDictionary<string, string> GetHeaderValues(
IReadOnlyList<string> keys, IHeaderDictionary headers)
{
}
我想传入诸如"trackingId, requestId, corrId"
之类的字符串列表,然后像这样返回字典:
trackingId: 123123
requestId: abc123123
corrId: xyz123
此操作的目的是传递所有标头,并仅检索所需的标头。
我们如何将这两个对象IReadOnlyList
和IHeaderDictionary
和map
交叉成常规的IDictionary
?
我尝试将以下两者相交:
headers.Keys.Intersect(keys);
,但这将返回一个无数的字符串。
答案 0 :(得分:1)
您可以将键与标头连接起来,然后将结果转换成这样的字典,但是该值可能不是单个字符串。在此解决方案中,我在StringValue对象上调用了ToString(),它可能不是您想要的,但这是方法签名显示的内容:
public static IDictionary<string, string> GetHeaderValues(
IReadOnlyList<string> keys, IHeaderDictionary headers)
{
return headers
.Join(keys, h => h.Key, k => k, (h, k) => h)
.ToDictionary(h => h.Key, h => h.Value.ToString());
}
答案 1 :(得分:1)
简短的伪代码:
intersect(keys1,keys2) // get common keys list
|> map to (key,value) // map to key-value pair list
|> to dictionary // convert list to dict
C#实现:
public static IDictionary<string, string> GetHeaderValues(IReadOnlyList<string> keys, IHeaderDictionary headers)
{
return keys.Intersect(headers.Keys)
.Select(k => new KeyValuePair<string,string>(k,headers[k]))
.ToDictionary(p => p.Key, p => p.Value);
}
测试用例:
var list = new List<string>{
"Content-tyb3", // non-exist
"Cookie",
"Accept-Language",
"Program", // non-exist
};
var headers = GetHeaderValues(list,Request.Headers);