C#如何将HttpClient Keep-Alive设置为false

时间:2016-04-01 13:44:21

标签: c# .net rest httpclient httpwebresponse

我在.NET上的HTTP请求有一个低性能问题。对localhost上的REST API的HTTP GET请求大约需要500毫秒才能完成。我花了很多时间来解决它。我尝试了很多方法:HttpClientHttpWebRequestWebClientRestSharp。他们都没有工作。互联网上的大多数解决方案都说要将Proxy参数设置为null,但它仍然无法更快地运行。

我发现减少这个时间的唯一方法是将请求的Keep-Alive参数设置为false:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
request.Method = "GET";
request.KeepAlive = false;

HttpWebResponse response = (HttpWebResponse)request.GetResponse();

这很有效。时间减少到7-10毫秒。但现在由于某些原因,我需要使用HttpClient而不是HttpWebRequest。我无法找到如何将{-1}}的Keep-Alive设置为false。我发现的唯一一件事是如何通过将“连接”标题设置为“保持活跃”来将其设置为true。

我在HttpClient上使用此代码进行POST请求:

HttpClient

完成后仍需要500-600毫秒。

5 个答案:

答案 0 :(得分:26)

当您设置HttpWebRequest.KeepAlive = true时,标头集连接:保持活动

设置HttpWebRequest.KeepAlive = false时,标题集为连接:关闭

所以你需要

_http.DefaultRequestHeaders.Add("Connection", "close");

答案 1 :(得分:10)

使用此代码禁用客户端上的HTTP Keep-Alive:

_http.DefaultRequestHeaders.ConnectionClose = true;

这会将Connection请求标头设置为close

答案 2 :(得分:2)

见下面的代码:

HttpClient cli;
...
cli.DefaultRequestHeaders.Add("Connection", "keep-alive");
cli.DefaultRequestHeaders.Add("Keep-Alive", "600");

答案 3 :(得分:0)

我已经测试过,希望对您有帮助

_client.DefaultRequestHeaders.Connection.Add("Keep-Alive");

答案 4 :(得分:0)

我写了HttpClientHandler,并在请求之前的处理程序中删除了标题“ Connection”。在这种情况下,它将设置默认的“连接:保持活动”。即使在此之前,您默认情况下也将其放入HttpClient中,设置属性等。请检查您的处理程序。