如何设置"连接:keep-alive"通过HttpClient以小写形式标题?

时间:2016-05-03 13:10:47

标签: c# httpclient keep-alive

我有一个任务,我需要能够以与Firefox浏览器相同的方式发送Connection:keep-alive标头(请注意,keep-alive必须全部为小写):

"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中完成的答案:How to send lower-case Keep-Alive header through HttpWebRequest

在HttpClient中可以有类似的东西吗?

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

对于HTTP Server,“keep-alive”是否为大写并不重要。 只需添加文本“keep-alive”或“Keep-Alive”或“KEEP_ALIVE”,然后应该对待它们。

希望这会有所帮助。

答案 2 :(得分:1)

你试过这个:

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

它给出了这个:

enter image description here