Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/corefx.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorStephen Toub <stoub@microsoft.com>2017-04-19 21:14:39 +0300
committerGitHub <noreply@github.com>2017-04-19 21:14:39 +0300
commit554c330585adbb02be6bdbe26d6ea496d73d3380 (patch)
treeba9af17a126c2a32ad41607108033e25862c257a /src
parent00243dd86175e29480dc08e8d32db6b276331c4e (diff)
parent5bd6fd713ee2909100381e5edd98083872ff8897 (diff)
Merge pull request #18612 from stephentoub/hwr_keepalive
Fix HttpWebRequest.KeepAlive handling
Diffstat (limited to 'src')
-rw-r--r--src/System.Net.Requests/src/System/Net/HttpWebRequest.cs28
-rw-r--r--src/System.Net.Requests/tests/HttpWebRequestHeaderTest.cs34
2 files changed, 41 insertions, 21 deletions
diff --git a/src/System.Net.Requests/src/System/Net/HttpWebRequest.cs b/src/System.Net.Requests/src/System/Net/HttpWebRequest.cs
index fc9b2572ca..5bd2f94c53 100644
--- a/src/System.Net.Requests/src/System/Net/HttpWebRequest.cs
+++ b/src/System.Net.Requests/src/System/Net/HttpWebRequest.cs
@@ -384,24 +384,7 @@ namespace System.Net
}
- public bool KeepAlive
- {
- get
- {
- return _webHeaderCollection[HttpKnownHeaderNames.KeepAlive] == bool.TrueString;
- }
- set
- {
- if (value)
- {
- SetSpecialHeaders(HttpKnownHeaderNames.KeepAlive, bool.TrueString);
- }
- else
- {
- SetSpecialHeaders(HttpKnownHeaderNames.KeepAlive, bool.FalseString);
- }
- }
- }
+ public bool KeepAlive { get; set; } = true;
public bool UnsafeAuthenticatedConnectionSharing
{
@@ -1188,6 +1171,15 @@ namespace System.Net
request.Headers.TransferEncodingChunked = SendChunked;
+ if (KeepAlive)
+ {
+ request.Headers.Connection.Add(HttpKnownHeaderNames.KeepAlive);
+ }
+ else
+ {
+ request.Headers.ConnectionClose = true;
+ }
+
_sendRequestTask = client.SendAsync(
request,
_allowReadStreamBuffering ? HttpCompletionOption.ResponseContentRead : HttpCompletionOption.ResponseHeadersRead,
diff --git a/src/System.Net.Requests/tests/HttpWebRequestHeaderTest.cs b/src/System.Net.Requests/tests/HttpWebRequestHeaderTest.cs
index 51f5c0bf74..3bf8d34452 100644
--- a/src/System.Net.Requests/tests/HttpWebRequestHeaderTest.cs
+++ b/src/System.Net.Requests/tests/HttpWebRequestHeaderTest.cs
@@ -3,10 +3,8 @@
// See the LICENSE file in the project root for more information.
using System.Diagnostics;
-using System.Net.Http;
+using System.IO;
using System.Net.Sockets;
-using System.Net.Test.Common;
-using System.Threading.Tasks;
using Xunit;
using Xunit.Abstractions;
@@ -33,6 +31,7 @@ namespace System.Net.Tests
Assert.Null(request.CookieContainer);
Assert.True(request.AllowWriteStreamBuffering);
Assert.NotNull(request.ClientCertificates);
+ Assert.True(request.KeepAlive);
// TODO: Issue #17842
if (!PlatformDetection.IsFullFramework)
@@ -222,5 +221,34 @@ namespace System.Net.Tests
Assert.True(request.PreAuthenticate);
}
}
+
+ [Theory]
+ [InlineData(null)]
+ [InlineData(false)]
+ [InlineData(true)]
+ public void HttpWebRequest_KeepAlive_CorrectConnectionHeaderSent(bool? keepAlive)
+ {
+ HttpWebRequest request = WebRequest.CreateHttp(Configuration.Http.RemoteEchoServer);
+
+ if (keepAlive.HasValue)
+ {
+ request.KeepAlive = keepAlive.Value;
+ }
+
+ using (var response = (HttpWebResponse)request.GetResponse())
+ using (var body = new StreamReader(response.GetResponseStream()))
+ {
+ string content = body.ReadToEnd();
+ if (!keepAlive.HasValue || keepAlive.Value)
+ {
+ Assert.Contains("\"Connection\": \"Keep-Alive\"", content, StringComparison.OrdinalIgnoreCase);
+ }
+ else
+ {
+ Assert.Contains("\"Connection\": \"close\"", content, StringComparison.OrdinalIgnoreCase);
+ Assert.DoesNotContain("\"Keep-Alive\"", content, StringComparison.OrdinalIgnoreCase);
+ }
+ }
+ }
}
}