Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何设置;连接:保持活力”;通过HttpClient以小写形式显示标题?_C#_Httpclient_Keep Alive - Fatal编程技术网

C# 如何设置;连接:保持活力”;通过HttpClient以小写形式显示标题?

C# 如何设置;连接:保持活力”;通过HttpClient以小写形式显示标题?,c#,httpclient,keep-alive,C#,Httpclient,Keep Alive,我有一个任务,我需要能够发送连接:keep-alive头,发送方式与Firefox浏览器相同(注意keep-alive必须全部小写): 然而,我使用HttpClient并没有实现它。无论我尝试什么,请求总是有 "Connection: Keep-Alive" 下面是一个示例代码: var client = new HttpClient(); var request = new HttpRequestMessage() { RequestUri = new Uri("http://www

我有一个任务,我需要能够发送连接:keep-alive头,发送方式与Firefox浏览器相同(注意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”,则应被视为相同

希望这有帮助

你试过这个吗:

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Connection", "keep-alive");
它给出了:


只有在Windows平台上运行代码时才会出现此问题。它出现在.Net和.Net Core2.0中。其根本原因在于win32库“winhttp.dll”,其中包含用于“保持活动”的硬编码字符串,因此,如果您需要在windows上使其工作,则需要对此dll进行一些处理


好消息是这个问题不会影响运行Mono或.NET Core 2.0的Linux平台我使用.NET 4.5。我使用嗅探软件查看HTTP请求(类似Wireshark)。在我的例子中,我是在Xamarin.Android上开发的,我使用了一个叫做“数据包捕获”的Android应用程序。如果你把它改为“Keep Alive”,它也会变成“Keep Alive”吗?我只是想排除工具的限制。是的,我测试了这一点,并使用以下代码
client.DefaultRequestHeaders.Add(“连接”,“保持活动”)我在数据包捕获中得到了“连接:保持活动”。在Windows 7控制台应用程序(.Net 4.5.1)中,此代码导致以下结果:
连接:保持活动,保持活动
尽管规范说这不重要,但我最近遇到一些主机,如果请求不是小写,它们会拒绝请求,认为是禁止的。我知道,这是一个疯狂而令人愤怒的错误。在Windows平台上,该错误被修复在.NETCore2.1及更高版本上。如果您可以尝试升级.NET Core。
var client = new HttpClient();
client.DefaultRequestHeaders.Add("Connection", "keep-alive");