【发布时间】:2014-10-23 13:44:37
【问题描述】:
我不明白为什么 HttpRequestHeaders.GetValues(string) 返回的 IEnumerable 返回一个只有 1 个项目的 IEnumerable。
当标题中有多个具有所请求名称的项目时,我会得到一个带有 1 个字符串条目的 IEnumerable,它等于所有匹配的标题项目的 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。是我在这里遗漏了什么还是底层代码中的错误?
【问题讨论】:
-
仅仅是因为这是 RFC 2616 的要求。明确地来自 HTTP 1.1 §4.2:“当且仅当该标头字段的整个字段值被定义为逗号分隔列表时,具有相同字段名称的多个消息头字段可能出现在消息中” 。 HttpRequestHeaders 包含已解析的标头,解析器执行一些“清理”。
-
@AdrianoRepetti 但是第二个例子是一个逗号分隔的值列表,
GetValues返回一个IEnumerable,那么为什么不存在多个值呢?为什么它不只返回一个string? -
@RGraham 因为第二个示例不需要任何清理。逗号分隔的列表...是单个字符串。我想知道何时可能返回多个值...
标签: c# http-headers asp.net-web-api2