为什么HttpRequestHeaders.GetValues(string)返回的IEnumerable只有1个字符串?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么HttpRequestHeaders.GetValues(string)返回的IEnumerable只有1个字符串?相关的知识,希望对你有一定的参考价值。

我无法弄清楚为什么HttpRequestHeaders.GetValues(string)返回的IEnumerable返回一个IEnumerable,其中只有1个项目。

当具有所请求名称的多个项目在标题中时,我得到一个IEnumerable,其中包含1个字符串条目,该条目等于所有匹配标题项目的CSV连接。

我希望如果返回值是一个IEnumerable,每个匹配的头条目将是它自己的项目。相反,如果方法总是连接所有内容,那么我希望返回值只是一个字符串。

预期:

{ "Test", "Test2" }

实际:

{ "Test, Test2" }

使用Fiddler进行测试,我尝试在标题中添加多个条目:

GET https://localhost/api/v1/users/1 HTTP/1.1
Host: localhost
TestHeaderField: Test
TestHeaderField: Test2

以及多个逗号分隔的项目:

GET https://localhost/api/v1/users/1 HTTP/1.1
Host: localhost
TestHeaderField: Test, Test2

我正在使用带有.Net 4.5.1的ASP.NET Web API 2版本5.0.0。我在这里缺少什么,或者这是底层代码中的错误?

答案

如果值格式正确,HttpRequestHeaders.GetValues将为其具有解析器的标头返回多个值。您可以通过发送多个Accept标头来测试:

GET https://localhost/api/v1/users/1 HTTP/1.1
Host: localhost
Accept: text/html
Accept: application/xhtml+xml
Accept: application/xml
另一答案

您可以尝试这样的方法来获取每个请求标头:

NameValueCollection headers = HttpRequestHeaders;
for (int i = 0; i < headers.Count; i++)
{
    string key = headers.GetKey(i);
    string value = headers.Get(i);
    // use key and value
}

根据需要调整它,你似乎只有值而不是键。

以上是关于为什么HttpRequestHeaders.GetValues(string)返回的IEnumerable只有1个字符串?的主要内容,如果未能解决你的问题,请参考以下文章

Redis 为什么面试都问我却不懂?因为它快吗?它为什么快?

CodeBlocks中这是为啥啊

为什么选择容器技术,又为什么选择了kubernetes?

Full GC为什么那么慢?为什么老年代垃圾回收效率比新生代低很多?为什么Minor gc速度比Major GC慢?

转载 JavaWeb项目为什么我们要放弃jsp?为什么要前后端解耦?为什么要动静分离?

如何回答「为什么想做产品经理」面试核心问题3