首页 新闻 赞助 找找看

如何用最少的C#代码将NameValueCollection所有的key与value拼接成字符串

0
悬赏园豆:100 [已解决问题] 解决于 2017-05-14 17:53

实际应用场景是将http请求的Request.Headers(类型就是NameValueCollection)记录到日志。

C#
dudu的主页 dudu | 高人七级 | 园豆:31094
提问于:2017-05-13 10:16
< >
分享
最佳答案
0

 string.Join(",",Request.Headers.AllKeys.SelectMany(Request.Headers.GetValues, (k, v) => new { key = k, value = v }));

收获园豆:80
Yu | 专家六级 |园豆:12980 | 2017-05-13 21:12

SelectMany可行,稍作修改的代码:

var headersString = string.Join(
    Environment.NewLine,
    Request.Headers.AllKeys.SelectMany(
        Request.Headers.GetValues,
        (k, v) => k + ": " + v));
dudu | 园豆:31094 (高人七级) | 2017-05-14 17:43
其他回答(5)
-1

哈哈.tojson();我都是这么干的.

吴瑞祥 | 园豆:29449 (高人七级) | 2017-05-13 11:31
0

Headers = JsonConvert.SerializeObject(Request.Headers)

爱编程的大叔 | 园豆:30839 (高人七级) | 2017-05-13 12:15

这个序列化出来只有Key:

["Cache-Control","Connection","Content-Length","Accept","Accept-Encoding","Accept-Language","Cookie","Host","If-Modified-Since","User-Agent","Upgrade-Insecure-Requests","X-Original-URL"]
支持(0) 反对(0) dudu | 园豆:31094 (高人七级) | 2017-05-14 17:50
0

先转字典 再json

JsonConvert.SerializeObject(Request.Headers.AllKeys.ToDictionary(k=>k,v=>Request.Headers[v]))

收获园豆:20
Qlin | 园豆:2403 (老鸟四级) | 2017-05-13 13:18
0

我觉得还是用string.Join直接拼比较实用,至少不需要依赖第三方包。

virtual1988 | 园豆:452 (菜鸟二级) | 2017-05-13 14:29
0
string headersString = string.Join("\r\n", context.Request.Headers.Select(s => s.Key + ":" + s.Value.ToString()));

哈哈,楼上的思路,不用第三方包。

行乎当行 | 园豆:347 (菜鸟二级) | 2017-05-13 17:45

报错:

'NameValueCollection' does not contain a definition for 'Select' and no extension method 'Select' accepting a first argument of type 'NameValueCollection' could be found
支持(0) 反对(0) dudu | 园豆:31094 (高人七级) | 2017-05-14 17:46

@dudu: 这段代码在asp.net core中是可以运行的。

刚看了一下Core版本的Headers属性的类型是IHeaderDictionary,继承了泛型的IEnumerable;

而传统的ASP.NET中Headers的类型为NameValueCollection,只继承了非泛型的IEnumerable。

Select这个扩展方法是对泛型的IEnumerable借口的扩展,所以这里不能使用…

支持(0) 反对(0) 行乎当行 | 园豆:347 (菜鸟二级) | 2017-05-14 18:53

@行乎当行: 嗯,asp.net core中可以的。

支持(0) 反对(0) dudu | 园豆:31094 (高人七级) | 2017-05-14 20:54
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册