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

时间:2014-08-29 14:11:33

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

我无法弄清楚为什么 HttpRequestHeaders.GetValues(string)返回的IEnumerable会返回一个只有1个项目的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

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

2 个答案:

答案 0 :(得分:0)

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

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
}

根据需要调整此项,您似乎只有值而不是键。

答案 1 :(得分: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