【问题标题】:How to remove Content-Type and User-Agent headers from HttpClient request?如何从 HttpClient 请求中删除 Content-Type 和 User-Agent 标头?
【发布时间】:2019-02-17 16:29:09
【问题描述】:

我正在尝试在 xamarin(目标:.net 标准)环境中使用 System.Net.Http.HttpClient 创建 Http 请求。请求将是周期性的,不会包含太多数据。默认情况下,所有请求都包含User-AgentContent-Type 标头,它们比请求主体大4 倍。 我不需要Content-Type,因为服务器只接受一种内容类型,并且当标头不存在时它假定正确的内容类型。

我已经尝试删除 UserAgent 标头,但仍在设置默认标头。

HttpClient.DefaultRequestHeaders.UserAgent.Clear();

我还尝试将 Content-Type 设置为 null、空字符串等:

request.Content = new ByteArrayContent(byteArray);
request.Content.Headers.ContentType = null; //Doesn't work
request.Content.Headers.ContentType = new MediaTypeHeaderValue(null); //Throws exception
request.Content.Headers.ContentType = new MediaTypeHeaderValue(""); //Throws exception

如何创建可等待的 http 请求并完全控制标头?

【问题讨论】:

    标签: http-headers dotnet-httpclient


    【解决方案1】:

    经过一天的努力,我发现 Xamarin 可以使用 HttpMessageHandler 的两种不同实现,这是实际发送请求的底层机制:

    • 托管(较旧的)- 发送预期的标头(未发送空的 User-AgentContent-Type
    • Native - 是默认值,其行为与问题中的一样。

    HttpClient 在 .NET Core 中的行为类似于托管的,所以我认为这是预期的行为。 github上的问题:https://github.com/xamarin/xamarin-android/issues/2747

    来源:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多