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

本文关键字:IEnumerable 只有 1个 字符串 返回 HttpRequestHeaders GetValues string 为什么 | 更新日期: 2023-09-27 18:20:09

我不明白为什么HttpRequestHeaders返回的IEnumerable。GetValues(string)返回的IEnumerable中只有一个项。

当标题中有多个具有请求名称的项目时,我会得到一个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

我使用的是ASP.NET Web API 2版本5.0.0和.NET 4.5.1。是我遗漏了什么,还是这是底层代码中的错误?

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

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
}

根据需要调整它,您似乎只有值,但没有关键点。