группировать похожие строки в списке на основе их содержимого

.Net пытается заставить вас подчиняться определенным стандартам, а именно, что заголовок Content-Type может быть указан только в запросах, имеющих контент (например, POST, PUT и т. д.). Поэтому, как указывали другие, предпочтительный способ установки заголовка Content-Type - через свойство HttpContent.Headers.ContentType .

С учетом сказанного некоторые API (такие как LiquidFiles Api , начиная с 2016-12-19) требует установки заголовка Content-Type для запроса GET. .Net не позволит устанавливать этот заголовок на самом запросе - даже используя TryAddWithoutValidation. Кроме того, вы не можете указать Content для запроса - даже если он имеет нулевую длину. Единственный способ, которым я мог бы обойти это, - прибегнуть к размышлениям. Код (в случае, если ему это еще нужно)

var field = typeof(System.Net.Http.Headers.HttpRequestHeaders)
    .GetField("invalidHeaders", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static) 
  ?? typeof(System.Net.Http.Headers.HttpRequestHeaders) 
    .GetField("s_invalidHeaders", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static);
if (field != null)
{
  var invalidFields = (HashSet)field.GetValue(null);
  invalidFields.Remove("Content-Type");
}
_client.DefaultRequestHeaders.TryAddWithoutValidation("Content-Type", "text/xml");

Редактировать:

Как отмечено в комментариях, это поле имеет разные имена в разных версиях dll. В исходном коде на GitHub поле в настоящее время называется s_invalidHeaders. Пример был изменен для учета этого в предположении @David Thompson.

21
задан i_raqz 22 December 2010 в 08:03
поделиться