Я не могу понять, почему IEnumerable, возвращаемый HttpRequestHeaders.GetValues (строка) возвращает IEnumerable, который имеет только один элемент в нем.Почему IEnumerable, возвращаемый HttpRequestHeaders.GetValues (string), имеет только одну строку?
Когда в заголовке указано несколько элементов с запрошенным именем, я получаю IEnumerable с 1 строковой записью, которая равна CSV-конкатенации всех соответствующих элементов заголовка.
Я ожидал бы, если возвращаемое значение является IEnumerable, что каждая соответствующая запись заголовка будет его собственным элементом. И наоборот, если метод всегда конкатенирует все, тогда я ожидаю, что возвращаемое значение будет просто одной строкой.
Ожидаемое:
{ "Test", "Test2" }
Actual:
{ "Test, Test2" }
Использование Fiddler для проверки, я пытался добавить несколько записей в мой заголовок:
GET https://localhost/api/v1/users/1 HTTP/1.1
Host: localhost
TestHeaderField: Test
TestHeaderField: Test2
As а также несколько mma отдельные элементы:
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', так почему бы не быть нескольких значений? Почему бы просто не вернуть строку? – CodingIntrigue
@RGraham, потому что 2-й пример не нуждается в очистке. Список, разделенный запятыми ... Является единственной строкой. Интересно, КОГДА может быть возвращено несколько значений ... –