Применение заголовков по умолчанию к содержимому запроса, состоящего из нескольких частей

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

Я пытаюсь применить это к поддержке пакетной обработки в веб-API, но заметил, что эти заголовки по умолчанию не применяются к многосоставным HttpMessageContent запросам:

var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-Some-Header, "foobar");

var batchContent = new MultipartContent("mixed");

foreach(var x in something)
{
    // these inner requests don't get default headers.
    HttpRequestMessage msg = MakeRequestFromSomething(x);
    batchContent.Add(new HttpMessageContent(msg));
}

// only this outer one does.
var results = await client.PostAsync("/batch", batchContent);

Такое поведение имеет смысл, но я все еще ищу способ применить заголовки к внутренним запросам. Есть ли у HttpClient или веб-API что-нибудь, чтобы сделать это чище, чем вручную очистить заголовки запроса и заменить их значениями по умолчанию для клиента?


person Cory Nelson    schedule 12.02.2014    source источник


Ответы (1)


Вы можете добавить в свой цикл после создания сообщения следующее:

foreach (var header in client.DefaultRequestHeaders)
{
     msg.Headers.Remove(header.Key);
     msg.Headers.TryAddWithoutValidation(header.Key, header.Value);
}

Это объединит заголовки по умолчанию с заголовками сообщений.

person Darrel Miller    schedule 12.02.2014
comment
@CoryNelson К сожалению, я не нашел ничего в библиотеках, которые предоставляют возможности копирования заголовков. У них есть внутренний код, который делает это, но нет ничего общедоступного. - person Darrel Miller; 12.02.2014
comment
Да, я подумал, что где-то может быть метод расширения типа client.CreateResponse(). - person Cory Nelson; 13.02.2014
comment
@CoryNelson Я подозреваю, что сложно решить, что именно делать с конфликтами, поэтому любой общий метод может не делать того, чего ожидает пользователь. - person Darrel Miller; 13.02.2014