From bc13fd545050f972649c618e8cb6a8c5edcf1875 Mon Sep 17 00:00:00 2001 From: David Fowler Date: Thu, 2 Aug 2018 16:45:29 -0700 Subject: [PATCH] Write websocket header directly to the repsonse headers (#253) --- .../Internal/HandshakeHelpers.cs | 11 ++++++----- .../WebSocketMiddleware.cs | 6 +----- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/src/Microsoft.AspNetCore.WebSockets/Internal/HandshakeHelpers.cs b/src/Microsoft.AspNetCore.WebSockets/Internal/HandshakeHelpers.cs index a4bb0721ab..c001e9318e 100644 --- a/src/Microsoft.AspNetCore.WebSockets/Internal/HandshakeHelpers.cs +++ b/src/Microsoft.AspNetCore.WebSockets/Internal/HandshakeHelpers.cs @@ -5,6 +5,7 @@ using System; using System.Collections.Generic; using System.Security.Cryptography; using System.Text; +using Microsoft.AspNetCore.Http; namespace Microsoft.AspNetCore.WebSockets.Internal { @@ -63,14 +64,14 @@ namespace Microsoft.AspNetCore.WebSockets.Internal return validConnection && validUpgrade && validVersion && validKey; } - public static IEnumerable> GenerateResponseHeaders(string key, string subProtocol) + public static void GenerateResponseHeaders(string key, string subProtocol, IHeaderDictionary headers) { - yield return new KeyValuePair(Constants.Headers.Connection, Constants.Headers.ConnectionUpgrade); - yield return new KeyValuePair(Constants.Headers.Upgrade, Constants.Headers.UpgradeWebSocket); - yield return new KeyValuePair(Constants.Headers.SecWebSocketAccept, CreateResponseKey(key)); + headers[Constants.Headers.Connection] = Constants.Headers.ConnectionUpgrade; + headers[Constants.Headers.Upgrade] = Constants.Headers.UpgradeWebSocket; + headers[Constants.Headers.SecWebSocketAccept] = CreateResponseKey(key); if (!string.IsNullOrWhiteSpace(subProtocol)) { - yield return new KeyValuePair(Constants.Headers.SecWebSocketProtocol, subProtocol); + headers[Constants.Headers.SecWebSocketProtocol] = subProtocol; } } diff --git a/src/Microsoft.AspNetCore.WebSockets/WebSocketMiddleware.cs b/src/Microsoft.AspNetCore.WebSockets/WebSocketMiddleware.cs index 74f1e4f7d8..35e7f99019 100644 --- a/src/Microsoft.AspNetCore.WebSockets/WebSocketMiddleware.cs +++ b/src/Microsoft.AspNetCore.WebSockets/WebSocketMiddleware.cs @@ -155,11 +155,7 @@ namespace Microsoft.AspNetCore.WebSockets string key = string.Join(", ", _context.Request.Headers[Constants.Headers.SecWebSocketKey]); - var responseHeaders = HandshakeHelpers.GenerateResponseHeaders(key, subProtocol); - foreach (var headerPair in responseHeaders) - { - _context.Response.Headers[headerPair.Key] = headerPair.Value; - } + HandshakeHelpers.GenerateResponseHeaders(key, subProtocol, _context.Response.Headers); Stream opaqueTransport = await _upgradeFeature.UpgradeAsync(); // Sets status code to 101