ソースを参照

Replace some usage of QueryParamCollection

Claus Vium 6 年 前
コミット
27e7e792b3
25 ファイル変更66 行追加197 行削除
  1. 5 5
      Emby.Dlna/Api/DlnaServerService.cs
  2. 1 2
      Emby.Dlna/ConnectionManager/ConnectionManager.cs
  3. 1 1
      Emby.Dlna/ContentDirectory/ContentDirectory.cs
  4. 3 2
      Emby.Dlna/ControlRequest.cs
  5. 8 9
      Emby.Dlna/DlnaManager.cs
  6. 1 4
      Emby.Dlna/IUpnpService.cs
  7. 2 1
      Emby.Dlna/MediaReceiverRegistrar/MediaReceiverRegistrar.cs
  8. 4 3
      Emby.Server.Implementations/HttpServer/HttpListenerHost.cs
  9. 8 11
      Emby.Server.Implementations/HttpServer/HttpResultFactory.cs
  10. 2 1
      Emby.Server.Implementations/HttpServer/WebSocketConnection.cs
  11. 2 1
      Emby.Server.Implementations/Net/WebSocketConnectEventArgs.cs
  12. 1 1
      Emby.Server.Implementations/Services/ServiceHandler.cs
  13. 2 1
      Emby.Server.Implementations/Session/SessionWebSocketListener.cs
  14. 0 2
      Emby.Server.Implementations/SocketSharp/RequestMono.cs
  15. 2 4
      Emby.Server.Implementations/SocketSharp/WebSocketSharpListener.cs
  16. 4 8
      Emby.Server.Implementations/SocketSharp/WebSocketSharpRequest.cs
  17. 3 80
      Emby.Server.Implementations/SocketSharp/WebSocketSharpResponse.cs
  18. 3 3
      MediaBrowser.Api/Playback/BaseStreamingService.cs
  19. 3 2
      MediaBrowser.Controller/Dlna/IDlnaManager.cs
  20. 2 1
      MediaBrowser.Controller/Net/IWebSocketConnection.cs
  21. 4 2
      MediaBrowser.Controller/Net/WebSocketConnectEventArgs.cs
  22. 0 5
      MediaBrowser.Model/Services/IHttpRequest.cs
  23. 0 12
      MediaBrowser.Model/Services/IHttpResponse.cs
  24. 5 16
      MediaBrowser.Model/Services/IRequest.cs
  25. 0 20
      MediaBrowser.Model/Services/QueryParamCollection.cs

+ 5 - 5
Emby.Dlna/Api/DlnaServerService.cs

@@ -136,7 +136,7 @@ namespace Emby.Dlna.Api
         {
             var url = Request.AbsoluteUri;
             var serverAddress = url.Substring(0, url.IndexOf("/dlna/", StringComparison.OrdinalIgnoreCase));
-            var xml = _dlnaManager.GetServerDescriptionXml(Request.Headers.ToDictionary(), request.UuId, serverAddress);
+            var xml = _dlnaManager.GetServerDescriptionXml(Request.Headers, request.UuId, serverAddress);
 
             var cacheLength = TimeSpan.FromDays(1);
             var cacheKey = Request.RawUrl.GetMD5();
@@ -147,21 +147,21 @@ namespace Emby.Dlna.Api
 
         public object Get(GetContentDirectory request)
         {
-            var xml = ContentDirectory.GetServiceXml(Request.Headers.ToDictionary());
+            var xml = ContentDirectory.GetServiceXml();
 
             return _resultFactory.GetResult(Request, xml, XMLContentType);
         }
 
         public object Get(GetMediaReceiverRegistrar request)
         {
-            var xml = MediaReceiverRegistrar.GetServiceXml(Request.Headers.ToDictionary());
+            var xml = MediaReceiverRegistrar.GetServiceXml();
 
             return _resultFactory.GetResult(Request, xml, XMLContentType);
         }
 
         public object Get(GetConnnectionManager request)
         {
-            var xml = ConnectionManager.GetServiceXml(Request.Headers.ToDictionary());
+            var xml = ConnectionManager.GetServiceXml();
 
             return _resultFactory.GetResult(Request, xml, XMLContentType);
         }
@@ -193,7 +193,7 @@ namespace Emby.Dlna.Api
 
             return service.ProcessControlRequest(new ControlRequest
             {
-                Headers = Request.Headers.ToDictionary(),
+                Headers = Request.Headers,
                 InputXml = requestStream,
                 TargetServerUuId = id,
                 RequestedUrl = Request.AbsoluteUri

+ 1 - 2
Emby.Dlna/ConnectionManager/ConnectionManager.cs

@@ -1,4 +1,3 @@
-using System.Collections.Generic;
 using Emby.Dlna.Service;
 using MediaBrowser.Common.Net;
 using MediaBrowser.Controller.Configuration;
@@ -24,7 +23,7 @@ namespace Emby.Dlna.ConnectionManager
             XmlReaderSettingsFactory = xmlReaderSettingsFactory;
         }
 
-        public string GetServiceXml(IDictionary<string, string> headers)
+        public string GetServiceXml()
         {
             return new ConnectionManagerXmlBuilder().GetXml();
         }

+ 1 - 1
Emby.Dlna/ContentDirectory/ContentDirectory.cs

@@ -65,7 +65,7 @@ namespace Emby.Dlna.ContentDirectory
             }
         }
 
-        public string GetServiceXml(IDictionary<string, string> headers)
+        public string GetServiceXml()
         {
             return new ContentDirectoryXmlBuilder().GetXml();
         }

+ 3 - 2
Emby.Dlna/ControlRequest.cs

@@ -1,11 +1,12 @@
 using System.Collections.Generic;
 using System.IO;
+using Microsoft.AspNetCore.Http;
 
 namespace Emby.Dlna
 {
     public class ControlRequest
     {
-        public IDictionary<string, string> Headers { get; set; }
+        public IHeaderDictionary Headers { get; set; }
 
         public Stream InputXml { get; set; }
 
@@ -15,7 +16,7 @@ namespace Emby.Dlna
 
         public ControlRequest()
         {
-            Headers = new Dictionary<string, string>();
+            Headers = new HeaderDictionary();
         }
     }
 }

+ 8 - 9
Emby.Dlna/DlnaManager.cs

@@ -17,7 +17,9 @@ using MediaBrowser.Model.Drawing;
 using MediaBrowser.Model.IO;
 using MediaBrowser.Model.Reflection;
 using MediaBrowser.Model.Serialization;
+using Microsoft.AspNetCore.Http;
 using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Primitives;
 
 namespace Emby.Dlna
 {
@@ -205,16 +207,13 @@ namespace Emby.Dlna
             }
         }
 
-        public DeviceProfile GetProfile(IDictionary<string, string> headers)
+        public DeviceProfile GetProfile(IHeaderDictionary headers)
         {
             if (headers == null)
             {
                 throw new ArgumentNullException(nameof(headers));
             }
 
-            // Convert to case insensitive
-            headers = new Dictionary<string, string>(headers, StringComparer.OrdinalIgnoreCase);
-
             var profile = GetProfiles().FirstOrDefault(i => i.Identification != null && IsMatch(headers, i.Identification));
 
             if (profile != null)
@@ -230,12 +229,12 @@ namespace Emby.Dlna
             return profile;
         }
 
-        private bool IsMatch(IDictionary<string, string> headers, DeviceIdentification profileInfo)
+        private bool IsMatch(IHeaderDictionary headers, DeviceIdentification profileInfo)
         {
             return profileInfo.Headers.Any(i => IsMatch(headers, i));
         }
 
-        private bool IsMatch(IDictionary<string, string> headers, HttpHeaderInfo header)
+        private bool IsMatch(IHeaderDictionary headers, HttpHeaderInfo header)
         {
             // Handle invalid user setup
             if (string.IsNullOrEmpty(header.Name))
@@ -243,14 +242,14 @@ namespace Emby.Dlna
                 return false;
             }
 
-            if (headers.TryGetValue(header.Name, out string value))
+            if (headers.TryGetValue(header.Name, out StringValues value))
             {
                 switch (header.Match)
                 {
                     case HeaderMatchType.Equals:
                         return string.Equals(value, header.Value, StringComparison.OrdinalIgnoreCase);
                     case HeaderMatchType.Substring:
-                        var isMatch = value.IndexOf(header.Value, StringComparison.OrdinalIgnoreCase) != -1;
+                        var isMatch = value.ToString().IndexOf(header.Value, StringComparison.OrdinalIgnoreCase) != -1;
                         //_logger.LogDebug("IsMatch-Substring value: {0} testValue: {1} isMatch: {2}", value, header.Value, isMatch);
                         return isMatch;
                     case HeaderMatchType.Regex:
@@ -493,7 +492,7 @@ namespace Emby.Dlna
             internal string Path { get; set; }
         }
 
-        public string GetServerDescriptionXml(IDictionary<string, string> headers, string serverUuId, string serverAddress)
+        public string GetServerDescriptionXml(IHeaderDictionary headers, string serverUuId, string serverAddress)
         {
             var profile = GetProfile(headers) ??
                           GetDefaultProfile();

+ 1 - 4
Emby.Dlna/IUpnpService.cs

@@ -1,5 +1,3 @@
-using System.Collections.Generic;
-
 namespace Emby.Dlna
 {
     public interface IUpnpService
@@ -7,9 +5,8 @@ namespace Emby.Dlna
         /// <summary>
         /// Gets the content directory XML.
         /// </summary>
-        /// <param name="headers">The headers.</param>
         /// <returns>System.String.</returns>
-        string GetServiceXml(IDictionary<string, string> headers);
+        string GetServiceXml();
 
         /// <summary>
         /// Processes the control request.

+ 2 - 1
Emby.Dlna/MediaReceiverRegistrar/MediaReceiverRegistrar.cs

@@ -3,6 +3,7 @@ using Emby.Dlna.Service;
 using MediaBrowser.Common.Net;
 using MediaBrowser.Controller.Configuration;
 using MediaBrowser.Model.Xml;
+using Microsoft.AspNetCore.Http;
 using Microsoft.Extensions.Logging;
 
 namespace Emby.Dlna.MediaReceiverRegistrar
@@ -19,7 +20,7 @@ namespace Emby.Dlna.MediaReceiverRegistrar
             XmlReaderSettingsFactory = xmlReaderSettingsFactory;
         }
 
-        public string GetServiceXml(IDictionary<string, string> headers)
+        public string GetServiceXml()
         {
             return new MediaReceiverRegistrarXmlBuilder().GetXml();
         }

+ 4 - 3
Emby.Server.Implementations/HttpServer/HttpListenerHost.cs

@@ -22,6 +22,7 @@ using MediaBrowser.Model.Extensions;
 using MediaBrowser.Model.Serialization;
 using MediaBrowser.Model.Services;
 using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Http.Internal;
 using Microsoft.AspNetCore.WebUtilities;
 using Microsoft.Extensions.Configuration;
 using Microsoft.Extensions.Logging;
@@ -154,7 +155,7 @@ namespace Emby.Server.Implementations.HttpServer
             {
                 OnReceive = ProcessWebSocketMessageReceived,
                 Url = e.Url,
-                QueryString = e.QueryString ?? new QueryParamCollection()
+                QueryString = e.QueryString ?? new QueryCollection()
             };
 
             connection.Closed += Connection_Closed;
@@ -606,8 +607,8 @@ namespace Emby.Server.Implementations.HttpServer
             }
             finally
             {
-                httpRes.Close();
-
+                // TODO
+                httpRes.IsClosed = true;
                 stopWatch.Stop();
                 var elapsed = stopWatch.Elapsed;
                 if (elapsed.TotalMilliseconds > 500)

+ 8 - 11
Emby.Server.Implementations/HttpServer/HttpResultFactory.cs

@@ -16,6 +16,8 @@ using MediaBrowser.Model.IO;
 using MediaBrowser.Model.Serialization;
 using MediaBrowser.Model.Services;
 using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Primitives;
+using Microsoft.Net.Http.Headers;
 using IRequest = MediaBrowser.Model.Services.IRequest;
 using MimeTypes = MediaBrowser.Model.Net.MimeTypes;
 
@@ -246,9 +248,9 @@ namespace Emby.Server.Implementations.HttpServer
 
         private static string GetCompressionType(IRequest request)
         {
-            var acceptEncoding = request.Headers["Accept-Encoding"];
+            var acceptEncoding = request.Headers["Accept-Encoding"].ToString();
 
-            if (acceptEncoding != null)
+            if (string.IsNullOrEmpty(acceptEncoding))
             {
                 //if (_brotliCompressor != null && acceptEncoding.IndexOf("br", StringComparison.OrdinalIgnoreCase) != -1)
                 //    return "br";
@@ -424,12 +426,12 @@ namespace Emby.Server.Implementations.HttpServer
         /// </summary>
         private object GetCachedResult(IRequest requestContext, IDictionary<string, string> responseHeaders, StaticResultOptions options)
         {
-            bool noCache = (requestContext.Headers.Get("Cache-Control") ?? string.Empty).IndexOf("no-cache", StringComparison.OrdinalIgnoreCase) != -1;
+            bool noCache = (requestContext.Headers[HeaderNames.CacheControl].ToString()).IndexOf("no-cache", StringComparison.OrdinalIgnoreCase) != -1;
             AddCachingHeaders(responseHeaders, options.CacheDuration, noCache, options.DateLastModified);
 
             if (!noCache)
             {
-                DateTime.TryParse(requestContext.Headers.Get("If-Modified-Since"), out var ifModifiedSinceHeader);
+                DateTime.TryParse(requestContext.Headers[HeaderNames.IfModifiedSince], out var ifModifiedSinceHeader);
 
                 if (IsNotModified(ifModifiedSinceHeader, options.CacheDuration, options.DateLastModified))
                 {
@@ -530,7 +532,7 @@ namespace Emby.Server.Implementations.HttpServer
             options.ResponseHeaders = options.ResponseHeaders ?? new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
 
             var contentType = options.ContentType;
-            if (!string.IsNullOrEmpty(requestContext.Headers.Get("If-Modified-Since")))
+            if (!StringValues.IsNullOrEmpty(requestContext.Headers[HeaderNames.IfModifiedSince]))
             {
                 // See if the result is already cached in the browser
                 var result = GetCachedResult(requestContext, options.ResponseHeaders, options);
@@ -548,7 +550,7 @@ namespace Emby.Server.Implementations.HttpServer
             AddCachingHeaders(responseHeaders, options.CacheDuration, false, options.DateLastModified);
             AddAgeHeader(responseHeaders, options.DateLastModified);
 
-            var rangeHeader = requestContext.Headers.Get("Range");
+            var rangeHeader = requestContext.Headers["Range"];
 
             if (!isHeadRequest && !string.IsNullOrEmpty(options.Path))
             {
@@ -609,11 +611,6 @@ namespace Emby.Server.Implementations.HttpServer
             }
         }
 
-        /// <summary>
-        /// The us culture
-        /// </summary>
-        private static readonly CultureInfo UsCulture = new CultureInfo("en-US");
-
         /// <summary>
         /// Adds the caching responseHeaders.
         /// </summary>

+ 2 - 1
Emby.Server.Implementations/HttpServer/WebSocketConnection.cs

@@ -8,6 +8,7 @@ using MediaBrowser.Controller.Net;
 using MediaBrowser.Model.Net;
 using MediaBrowser.Model.Serialization;
 using MediaBrowser.Model.Services;
+using Microsoft.AspNetCore.Http;
 using Microsoft.Extensions.Logging;
 using UtfUnknown;
 
@@ -67,7 +68,7 @@ namespace Emby.Server.Implementations.HttpServer
         /// Gets or sets the query string.
         /// </summary>
         /// <value>The query string.</value>
-        public QueryParamCollection QueryString { get; set; }
+        public IQueryCollection QueryString { get; set; }
 
         /// <summary>
         /// Initializes a new instance of the <see cref="WebSocketConnection" /> class.

+ 2 - 1
Emby.Server.Implementations/Net/WebSocketConnectEventArgs.cs

@@ -1,6 +1,7 @@
 using System;
 using System.Net.WebSockets;
 using MediaBrowser.Model.Services;
+using Microsoft.AspNetCore.Http;
 
 namespace Emby.Server.Implementations.Net
 {
@@ -15,7 +16,7 @@ namespace Emby.Server.Implementations.Net
         /// Gets or sets the query string.
         /// </summary>
         /// <value>The query string.</value>
-        public QueryParamCollection QueryString { get; set; }
+        public IQueryCollection QueryString { get; set; }
         /// <summary>
         /// Gets or sets the web socket.
         /// </summary>

+ 1 - 1
Emby.Server.Implementations/Services/ServiceHandler.cs

@@ -154,7 +154,7 @@ namespace Emby.Server.Implementations.Services
             {
                 if (name == null) continue; //thank you ASP.NET
 
-                var values = request.QueryString.GetValues(name);
+                var values = request.QueryString[name];
                 if (values.Count == 1)
                 {
                     map[name] = values[0];

+ 2 - 1
Emby.Server.Implementations/Session/SessionWebSocketListener.cs

@@ -5,6 +5,7 @@ using MediaBrowser.Controller.Session;
 using MediaBrowser.Model.Events;
 using MediaBrowser.Model.Serialization;
 using MediaBrowser.Model.Services;
+using Microsoft.AspNetCore.Http;
 using Microsoft.Extensions.Logging;
 
 namespace Emby.Server.Implementations.Session
@@ -62,7 +63,7 @@ namespace Emby.Server.Implementations.Session
             }
         }
 
-        private SessionInfo GetSession(QueryParamCollection queryString, string remoteEndpoint)
+        private SessionInfo GetSession(IQueryCollection queryString, string remoteEndpoint)
         {
             if (queryString == null)
             {

+ 0 - 2
Emby.Server.Implementations/SocketSharp/RequestMono.cs

@@ -118,8 +118,6 @@ namespace Emby.Server.Implementations.SocketSharp
 
         public string Authorization => StringValues.IsNullOrEmpty(request.Headers["Authorization"]) ? null : request.Headers["Authorization"].ToString();
 
-        protected bool validate_cookies { get; set; }
-        protected bool validate_query_string { get; set; }
         protected bool validate_form { get; set; }
         protected bool checked_form { get; set; }
 

+ 2 - 4
Emby.Server.Implementations/SocketSharp/WebSocketSharpListener.cs

@@ -52,12 +52,10 @@ using Microsoft.Extensions.Logging;
                 var endpoint = ctx.Connection.RemoteIpAddress.ToString();
                 var url = ctx.Request.GetDisplayUrl();
 
-                var queryString = new QueryParamCollection(ctx.Request.Query);
-
                 var connectingArgs = new WebSocketConnectingEventArgs
                 {
                     Url = url,
-                    QueryString = queryString,
+                    QueryString = ctx.Request.Query,
                     Endpoint = endpoint
                 };
 
@@ -73,7 +71,7 @@ using Microsoft.Extensions.Logging;
                     WebSocketConnected(new WebSocketConnectEventArgs
                     {
                         Url = url,
-                        QueryString = queryString,
+                        QueryString = ctx.Request.Query,
                         WebSocket = socket,
                         Endpoint = endpoint
                     });

+ 4 - 8
Emby.Server.Implementations/SocketSharp/WebSocketSharpRequest.cs

@@ -13,7 +13,6 @@ using Microsoft.Extensions.Primitives;
 using Microsoft.Net.Http.Headers;
 using IHttpFile = MediaBrowser.Model.Services.IHttpFile;
 using IHttpRequest = MediaBrowser.Model.Services.IHttpRequest;
-using IHttpResponse = MediaBrowser.Model.Services.IHttpResponse;
 using IResponse = MediaBrowser.Model.Services.IResponse;
 
 namespace Emby.Server.Implementations.SocketSharp
@@ -21,7 +20,7 @@ namespace Emby.Server.Implementations.SocketSharp
     public partial class WebSocketSharpRequest : IHttpRequest
     {
         private readonly HttpRequest request;
-        private readonly IHttpResponse response;
+        private readonly IResponse response;
 
         public WebSocketSharpRequest(HttpRequest httpContext, HttpResponse response, string operationName, ILogger logger)
         {
@@ -34,11 +33,9 @@ namespace Emby.Server.Implementations.SocketSharp
 
         public HttpRequest HttpRequest => request;
 
-        public object OriginalRequest => request;
-
         public IResponse Response => response;
 
-        public IHttpResponse HttpResponse => response;
+        public IResponse HttpResponse => response;
 
         public string OperationName { get; set; }
 
@@ -396,10 +393,9 @@ namespace Emby.Server.Implementations.SocketSharp
 
         public string UserAgent => request.Headers[HeaderNames.UserAgent];
 
-        public QueryParamCollection Headers => new QueryParamCollection(request.Headers);
+        public IHeaderDictionary Headers => request.Headers;
 
-        private QueryParamCollection queryString;
-        public QueryParamCollection QueryString => queryString ?? (queryString = new QueryParamCollection(request.Query));
+        public IQueryCollection QueryString => request.Query;
 
         public bool IsLocal => string.Equals(request.HttpContext.Connection.LocalIpAddress.ToString(), request.HttpContext.Connection.RemoteIpAddress.ToString());
 

+ 3 - 80
Emby.Server.Implementations/SocketSharp/WebSocketSharpResponse.cs

@@ -1,23 +1,18 @@
 using System;
 using System.Collections.Generic;
 using System.IO;
-using System.Net;
-using System.Net.Sockets;
 using System.Runtime.InteropServices;
-using System.Text;
 using System.Threading;
 using System.Threading.Tasks;
-using Emby.Server.Implementations;
 using MediaBrowser.Model.IO;
 using MediaBrowser.Model.Services;
 using Microsoft.AspNetCore.Http;
 using Microsoft.Extensions.Logging;
-using IHttpResponse = MediaBrowser.Model.Services.IHttpResponse;
 using IRequest = MediaBrowser.Model.Services.IRequest;
 
 namespace Emby.Server.Implementations.SocketSharp
 {
-    public class WebSocketSharpResponse : IHttpResponse
+    public class WebSocketSharpResponse : IResponse
     {
         private readonly ILogger _logger;
 
@@ -51,42 +46,7 @@ namespace Emby.Server.Implementations.SocketSharp
             set => _response.ContentType = value;
         }
 
-        public QueryParamCollection Headers => new QueryParamCollection(_response.Headers);
-
-        private static string AsHeaderValue(Cookie cookie)
-        {
-            DateTime defaultExpires = DateTime.MinValue;
-
-            var path = cookie.Expires == defaultExpires
-                ? "/"
-                : cookie.Path ?? "/";
-
-            var sb = new StringBuilder();
-
-            sb.Append($"{cookie.Name}={cookie.Value};path={path}");
-
-            if (cookie.Expires != defaultExpires)
-            {
-                sb.Append($";expires={cookie.Expires:R}");
-            }
-
-            if (!string.IsNullOrEmpty(cookie.Domain))
-            {
-                sb.Append($";domain={cookie.Domain}");
-            }
-
-            if (cookie.Secure)
-            {
-                sb.Append(";Secure");
-            }
-
-            if (cookie.HttpOnly)
-            {
-                sb.Append(";HttpOnly");
-            }
-
-            return sb.ToString();
-        }
+        public IHeaderDictionary Headers => _response.Headers;
 
         public void AddHeader(string name, string value)
         {
@@ -111,51 +71,14 @@ namespace Emby.Server.Implementations.SocketSharp
 
         public Stream OutputStream => _response.Body;
 
-        public void Close()
-        {
-            if (!this.IsClosed)
-            {
-                this.IsClosed = true;
-
-                try
-                {
-                    var response = this._response;
-
-                    var outputStream = response.Body;
-
-                    // This is needed with compression
-                    outputStream.Flush();
-                    outputStream.Dispose();
-                }
-                catch (SocketException)
-                {
-                }
-                catch (Exception ex)
-                {
-                    _logger.LogError(ex, "Error in HttpListenerResponseWrapper");
-                }
-            }
-        }
-
         public bool IsClosed
         {
             get;
-            private set;
-        }
-
-        public void SetCookie(Cookie cookie)
-        {
-            var cookieStr = AsHeaderValue(cookie);
-            _response.Headers.Add("Set-Cookie", cookieStr);
+            set;
         }
 
         public bool SendChunked { get; set; }
 
-        public bool KeepAlive { get; set; }
-
-        public void ClearCookies()
-        {
-        }
         const int StreamCopyToBufferSize = 81920;
         public async Task TransmitFile(string path, long offset, long count, FileShareMode fileShareMode, IFileSystem fileSystem, IStreamHelper streamHelper, CancellationToken cancellationToken)
         {

+ 3 - 3
MediaBrowser.Api/Playback/BaseStreamingService.cs

@@ -609,12 +609,12 @@ namespace MediaBrowser.Api.Playback
         {
             foreach (var param in Request.QueryString)
             {
-                if (char.IsLower(param.Name[0]))
+                if (char.IsLower(param.Key[0]))
                 {
                     // This was probably not parsed initially and should be a StreamOptions
                     // TODO: This should be incorporated either in the lower framework for parsing requests
                     // or the generated URL should correctly serialize it
-                    request.StreamOptions[param.Name] = param.Value;
+                    request.StreamOptions[param.Key] = param.Value;
                 }
             }
         }
@@ -867,7 +867,7 @@ namespace MediaBrowser.Api.Playback
 
         private void ApplyDeviceProfileSettings(StreamState state)
         {
-            var headers = Request.Headers.ToDictionary();
+            var headers = Request.Headers;
 
             if (!string.IsNullOrWhiteSpace(state.Request.DeviceProfileId))
             {

+ 3 - 2
MediaBrowser.Controller/Dlna/IDlnaManager.cs

@@ -1,6 +1,7 @@
 using System.Collections.Generic;
 using MediaBrowser.Controller.Drawing;
 using MediaBrowser.Model.Dlna;
+using Microsoft.AspNetCore.Http;
 
 namespace MediaBrowser.Controller.Dlna
 {
@@ -17,7 +18,7 @@ namespace MediaBrowser.Controller.Dlna
         /// </summary>
         /// <param name="headers">The headers.</param>
         /// <returns>DeviceProfile.</returns>
-        DeviceProfile GetProfile(IDictionary<string, string> headers);
+        DeviceProfile GetProfile(IHeaderDictionary headers);
 
         /// <summary>
         /// Gets the default profile.
@@ -64,7 +65,7 @@ namespace MediaBrowser.Controller.Dlna
         /// <param name="serverUuId">The server uu identifier.</param>
         /// <param name="serverAddress">The server address.</param>
         /// <returns>System.String.</returns>
-        string GetServerDescriptionXml(IDictionary<string, string> headers, string serverUuId, string serverAddress);
+        string GetServerDescriptionXml(IHeaderDictionary headers, string serverUuId, string serverAddress);
 
         /// <summary>
         /// Gets the icon.

+ 2 - 1
MediaBrowser.Controller/Net/IWebSocketConnection.cs

@@ -4,6 +4,7 @@ using System.Threading;
 using System.Threading.Tasks;
 using MediaBrowser.Model.Net;
 using MediaBrowser.Model.Services;
+using Microsoft.AspNetCore.Http;
 
 namespace MediaBrowser.Controller.Net
 {
@@ -35,7 +36,7 @@ namespace MediaBrowser.Controller.Net
         /// Gets or sets the query string.
         /// </summary>
         /// <value>The query string.</value>
-        QueryParamCollection QueryString { get; set; }
+        IQueryCollection QueryString { get; set; }
 
         /// <summary>
         /// Gets or sets the receive action.

+ 4 - 2
MediaBrowser.Controller/Net/WebSocketConnectEventArgs.cs

@@ -1,5 +1,7 @@
 using System;
 using MediaBrowser.Model.Services;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Http.Internal;
 
 namespace MediaBrowser.Controller.Net
 {
@@ -22,7 +24,7 @@ namespace MediaBrowser.Controller.Net
         /// Gets or sets the query string.
         /// </summary>
         /// <value>The query string.</value>
-        public QueryParamCollection QueryString { get; set; }
+        public IQueryCollection QueryString { get; set; }
         /// <summary>
         /// Gets or sets a value indicating whether [allow connection].
         /// </summary>
@@ -31,7 +33,7 @@ namespace MediaBrowser.Controller.Net
 
         public WebSocketConnectingEventArgs()
         {
-            QueryString = new QueryParamCollection();
+            QueryString = new QueryCollection();
             AllowConnection = true;
         }
     }

+ 0 - 5
MediaBrowser.Model/Services/IHttpRequest.cs

@@ -2,11 +2,6 @@ namespace MediaBrowser.Model.Services
 {
     public interface IHttpRequest : IRequest
     {
-        /// <summary>
-        /// The HttpResponse
-        /// </summary>
-        IHttpResponse HttpResponse { get; }
-
         /// <summary>
         /// The HTTP Verb
         /// </summary>

+ 0 - 12
MediaBrowser.Model/Services/IHttpResponse.cs

@@ -4,17 +4,5 @@ namespace MediaBrowser.Model.Services
 {
     public interface IHttpResponse : IResponse
     {
-        //ICookies Cookies { get; }
-
-        /// <summary>
-        /// Adds a new Set-Cookie instruction to Response
-        /// </summary>
-        /// <param name="cookie"></param>
-        void SetCookie(Cookie cookie);
-
-        /// <summary>
-        /// Removes all pending Set-Cookie instructions
-        /// </summary>
-        void ClearCookies();
     }
 }

+ 5 - 16
MediaBrowser.Model/Services/IRequest.cs

@@ -1,20 +1,15 @@
 using System;
 using System.Collections.Generic;
 using System.IO;
-using System.Net;
 using System.Threading;
 using System.Threading.Tasks;
 using MediaBrowser.Model.IO;
+using Microsoft.AspNetCore.Http;
 
 namespace MediaBrowser.Model.Services
 {
     public interface IRequest
     {
-        /// <summary>
-        /// The underlying ASP.NET or HttpListener HttpRequest
-        /// </summary>
-        object OriginalRequest { get; }
-
         IResponse Response { get; }
 
         /// <summary>
@@ -51,9 +46,9 @@ namespace MediaBrowser.Model.Services
         /// </summary>
         Dictionary<string, object> Items { get; }
 
-        QueryParamCollection Headers { get; }
+        IHeaderDictionary Headers { get; }
 
-        QueryParamCollection QueryString { get; }
+        IQueryCollection QueryString { get; }
 
         Task<QueryParamCollection> GetFormData();
 
@@ -122,21 +117,15 @@ namespace MediaBrowser.Model.Services
 
         Stream OutputStream { get; }
 
-        /// <summary>
-        /// Signal that this response has been handled and no more processing should be done.
-        /// When used in a request or response filter, no more filters or processing is done on this request.
-        /// </summary>
-        void Close();
-
         /// <summary>
         /// Gets a value indicating whether this instance is closed.
         /// </summary>
-        bool IsClosed { get; }
+        bool IsClosed { get; set; }
 
         //Add Metadata to Response
         Dictionary<string, object> Items { get; }
 
-        QueryParamCollection Headers { get; }
+        IHeaderDictionary Headers { get; }
 
         Task TransmitFile(string path, long offset, long count, FileShareMode fileShareMode, IFileSystem fileSystem, IStreamHelper streamHelper, CancellationToken cancellationToken);
 

+ 0 - 20
MediaBrowser.Model/Services/QueryParamCollection.cs

@@ -1,10 +1,7 @@
 using System;
 using System.Collections.Generic;
-using System.Collections.Specialized;
 using System.Linq;
-using System.Net;
 using MediaBrowser.Model.Dto;
-using Microsoft.AspNetCore.Http;
 
 namespace MediaBrowser.Model.Services
 {
@@ -13,23 +10,6 @@ namespace MediaBrowser.Model.Services
     {
         public QueryParamCollection()
         {
-
-        }
-
-        public QueryParamCollection(IHeaderDictionary headers)
-        {
-            foreach (var pair in headers)
-            {
-                Add(pair.Key, pair.Value);
-            }
-        }
-
-        public QueryParamCollection(IQueryCollection queryCollection)
-        {
-            foreach (var pair in queryCollection)
-            {
-                Add(pair.Key, pair.Value);
-            }
         }
 
         private static StringComparison GetStringComparison()