Я использую HttpHeaders.TryGetValues , но я не могу понять, как заставить его возвращать несколько значений.
Вот что я пытаюсь:
using System.Net.Http;
var response = await new HttpClient().GetAsync("https://httpbin.org/response-headers?X-Numbers=0,1,1,2,3,5,8");
var success = response.Headers.TryGetValues("X-Numbers", out var values);
Console.WriteLine($"{success} ({values.Count()}) -> '{values.First()}'");
И вот результат:
True (1) -> '0,1,1,2,3,5,8'
Как обычно, документация очень скудная, и все, что говорится о параметре values
, - это
Указанные значения заголовка.
RFC 2616 раздел 4.2 описывает, как HTTP-заголовок может иметь несколько значений (выделено мной ):
Несколько полей заголовка сообщения с одинаковым именем поля МОГУТ присутствовать в сообщении тогда и только тогда, когда все значение поля для этого поля заголовка определено как список, разделенный запятыми strong> [т.е. # (значения)]. ДОЛЖНА быть возможна объединение нескольких полей заголовка в одну пару «имя-поля: значение поля» без изменения семантики сообщения путем добавления каждого последующего значения поля к первому, каждое из которых разделено запятой. Следовательно, порядок, в котором принимаются поля заголовка с одинаковым именем поля, важен для интерпретации значения комбинированного поля, и, таким образом, прокси-сервер НЕ ДОЛЖЕН изменять порядок значений этих полей при пересылке сообщения.
Как мы видим, значения разделены запятыми, поэтому я ожидал, что перечислимое значение будет содержать 7 значений (0
, 1
, 1
, 2
, 3
, 5
и 8
), но вместо этого TryGetValues
вернет одно строковое значение.
Могу ли я что-то сделать, чтобы он возвращал несколько значений?
values.SelectMany(v => v.Split(",").Select(s => s.Trim()))
просто поймать оба возвращаемых типа и покончить с этим. - person itsme86   schedule 28.09.2017