http-headers - 如何从 HttpClient 请求中删除 Content-Type 和 User-Agent 标头?
问题描述
我正在尝试System.Net.Http.HttpClient
在 xamarin(目标:.net 标准)环境中创建 Http 请求。请求将是周期性的,不会包含太多数据。默认情况下,所有请求都包含User-Agent
和Content-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 请求并完全控制标头?
解决方案
经过一天的努力,我发现 Xamarin 可以使用两种不同的实现,HttpMessageHandler
它们是实际发送请求的底层机制:
- 托管(较旧的) - 发送预期的标头(空
User-Agent
且未Content-Type
发送。 - Native - 是默认值,其行为与问题中的一样。
HttpClient
在 .NET Core 中的行为类似于托管的,所以我认为这是预期的行为。github上的问题:https ://github.com/xamarin/xamarin-android/issues/2747
资料来源:
推荐阅读
- node.js - bcrypt.comare 总是返回 false
- c# - 如何以编程方式在 Windows 8 和 Windows 10 桌面登录屏幕上显示状态栏?
- java - 将 Spark-BigQuery-Connector 与 Java 一起使用时面临的问题
- python - 无法使用 CS50 IDE 从我的 Web 应用程序向用户发送电子邮件
- angular - 按过滤器角度搜索特定列
- flutter - 如何将参数传递给flutter BLoc?
- python - Can you add a border to a cell in Jupyter Notebook which remains after output is rendered?
- html-email - mj-table 中内容的巨大差距
- java - 如何在字符串中的奇数和偶数之间切换?
- javascript - Gulp 4 - 任务没有通过 Browsersync 正常运行