Добавьте заголовок HTTP более одного раза и отправьте его отдельно, используя HttpWebRequest - PullRequest
0 голосов
/ 13 декабря 2011

Мне нужно отправить более чем Set-Cookie заголовок HTTP, используя HttpWebRequest класс.

Сначала проблема request.Headers.Add("Set-Cookie", "[cookie string]") добавляет заголовок, как и ожидалось, но последующие объединяются в первый добавленный заголовок.

Поведение по умолчанию усложняет получение набора файлов cookie получателем данного запроса, поскольку нелегко снова разделить заголовок на отдельные строки файлов cookie.

Есть ли способ добавить n раз к заголовку?

Возможно, некоторые заголовки не должны повторяться, но Set-Cookie является допустимым вариантом использования, потому что получатель должен читать больше, чем cookie.

Спасибо.

1 Ответ

1 голос
/ 13 декабря 2011

Потратив некоторое время на поиск готового решения, я закончил реализацию метода расширения до System.Net.WebHeaderCollection:

public static class WebHeaderCollectionExtensions
{
    public static ILookup<string, string> ToLookup(this WebHeaderCollection some)
    {
        List<KeyValuePair<string, string>> headers = new List<KeyValuePair<string, string>>();

        if (some.Count > 0)
        {
            string[] tempSplittedHeaders = null;

            foreach (string headerName in some)
            {
                if (some[headerName].Contains(";,"))
                {
                    tempSplittedHeaders = Regex.Split(some[headerName], ";,");

                    foreach (string splittedHeader in tempSplittedHeaders)
                    {
                        headers.Add(new KeyValuePair<string, string>(headerName, splittedHeader));
                    }
                }
                else
                {
                    headers.Add(new KeyValuePair<string, string>(headerName, some[headerName]));
                }
            }
        }

        return headers.ToLookup(keySelector => keySelector.Key, elementSelector => elementSelector.Value);
    }
}

Благодаря этому замечательному методу расширения я могу преобразовать коллекцию заголовков в поиск, который позволяет дублировать ключи, и в конце дня, выполнив некоторую обработку, я получаю список всех заголовков HTTP в отдельности. :

string wholeCookie = WebOperationContext.Current.IncomingRequest.Headers.ToLookup()["Set-Cookie"].Single(cookie => cookie.Contains("[Cookie name]"));

Я надеюсь, что поделиться своим решением будет хорошим вкладом, так как я полагаю, что другие имели или используют подобный случай!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...