如何通过HttpClient设置"Connection: keep-alive" header为小写?

How to set "Connection: keep-alive" header in lower case through HttpClient?

我有一个任务需要能够发送 Connection: keep-alive header 与 Firefox 浏览器完成的方式相同(注意 keep-alive 必须都是 lower-case):

"Connection: keep-alive"

但是,我没有运气使用 HttpClient 实现它。无论我尝试什么,请求总是

"Connection: Keep-Alive"

这是一个示例代码:

var client = new HttpClient();
var request = new HttpRequestMessage()
{
    RequestUri = new Uri("http://www.someURI.com"),
    Method = HttpMethod.Get,
};
request.Headers.Connection.Clear(); // No need to do it as it is empty anyway
request.Headers.Connection.Add("keep-alive"); // Still results in "Keep-Alive"
var task = client.SendAsync(request);

另一次尝试:

var client = new HttpClient();
client.DefaultRequestHeaders.Clear();
client.DefaultRequestHeaders.Connection.Add("keep-alive"); // Still results in "Keep-Alive"
string result = await client.GetStringAsync("http://www.someURI.com");

在 HttpWebRequest 中有一个关于如何完成的答案:

在 HttpClient 中是否可以实现类似的功能?

对于 HTTP 服务器来说,"keep-alive" 是否为大写无关紧要。 只需添加文本 "keep-alive" 或 "Keep-Alive" 或 "KEEP_ALIVE" 然后应该相同对待。

希望这对您有所帮助。

你试过这个吗:

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Connection", "keep-alive");

它给出了这个:

当您在 Windows 平台上 运行 编码时, 会出现此问题。它存在于 .Net 和 .Net Core 2.0 中。其根本原因在于 win32 库 "winhttp.dll",它包含 "Keep-Alive" 的硬编码字符串,因此如果您需要让它在 windows 上运行,您需要对这个 dll 做一些事情。

好消息是 这个问题不会影响 Linux 平台 运行ning Mono 或 .NET Core 2.0