我有一个任务,我需要能够以与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中可以有类似的东西吗?
答案 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)