我无法弄清楚为什么 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。我在这里缺少什么,或者这是底层代码中的错误?
答案 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