.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.