C# 如何设置;连接:保持活力”;通过HttpClient以小写形式显示标题?
我有一个任务,我需要能够发送连接:keep-alive头,发送方式与Firefox浏览器相同(注意keep-alive必须全部小写): 然而,我使用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
"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");