首页 > 解决方案 > 如何从 HttpClient 请求中删除 Content-Type 和 User-Agent 标头?

问题描述

我正在尝试System.Net.Http.HttpClient在 xamarin(目标:.net 标准)环境中创建 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-headersdotnet-httpclient

解决方案


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

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

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

资料来源:


推荐阅读