aboutsummaryrefslogtreecommitdiff
path: root/Emby.Server.Implementations/Services/ServiceHandler.cs
diff options
context:
space:
mode:
authorBond-009 <bond.009@outlook.com>2019-03-26 19:20:40 +0100
committerBond-009 <bond.009@outlook.com>2019-03-26 19:20:40 +0100
commita332092769cec5a3b17b7fb49b2d7c66bfe289bd (patch)
tree350f5775d822e3b1d7faa041f8b49e08f4577bd4 /Emby.Server.Implementations/Services/ServiceHandler.cs
parent31607fbb377c826415dc0f6689ac4189b38c840f (diff)
Reduce complexity http routes
Diffstat (limited to 'Emby.Server.Implementations/Services/ServiceHandler.cs')
-rw-r--r--Emby.Server.Implementations/Services/ServiceHandler.cs103
1 files changed, 51 insertions, 52 deletions
diff --git a/Emby.Server.Implementations/Services/ServiceHandler.cs b/Emby.Server.Implementations/Services/ServiceHandler.cs
index 3c8adfc98..243d2cca2 100644
--- a/Emby.Server.Implementations/Services/ServiceHandler.cs
+++ b/Emby.Server.Implementations/Services/ServiceHandler.cs
@@ -11,6 +11,18 @@ namespace Emby.Server.Implementations.Services
{
public class ServiceHandler
{
+ private readonly ServiceController _serviceController;
+
+ public RestPath RestPath { get; }
+
+ public string ResponseContentType { get; }
+
+ internal ServiceHandler(RestPath restPath, string responseContentType)
+ {
+ RestPath = restPath;
+ ResponseContentType = responseContentType;
+ }
+
protected static Task<object> CreateContentTypeRequest(HttpListenerHost host, IRequest httpReq, Type requestType, string contentType)
{
if (!string.IsNullOrEmpty(contentType) && httpReq.ContentLength > 0)
@@ -21,21 +33,22 @@ namespace Emby.Server.Implementations.Services
return deserializer(requestType, httpReq.InputStream);
}
}
+
return Task.FromResult(host.CreateInstance(requestType));
}
- public static RestPath FindMatchingRestPath(string httpMethod, string pathInfo, out string contentType)
+ public RestPath FindMatchingRestPath(string httpMethod, string pathInfo, out string contentType)
{
pathInfo = GetSanitizedPathInfo(pathInfo, out contentType);
- return ServiceController.Instance.GetRestPathForRequest(httpMethod, pathInfo);
+ return _serviceController.GetRestPathForRequest(httpMethod, pathInfo);
}
public static string GetSanitizedPathInfo(string pathInfo, out string contentType)
{
contentType = null;
var pos = pathInfo.LastIndexOf('.');
- if (pos >= 0)
+ if (pos != -1)
{
var format = pathInfo.Substring(pos + 1);
contentType = GetFormatContentType(format);
@@ -44,58 +57,38 @@ namespace Emby.Server.Implementations.Services
pathInfo = pathInfo.Substring(0, pos);
}
}
+
return pathInfo;
}
private static string GetFormatContentType(string format)
{
//built-in formats
- if (format == "json")
- return "application/json";
- if (format == "xml")
- return "application/xml";
-
- return null;
- }
-
- public RestPath GetRestPath(string httpMethod, string pathInfo)
- {
- if (this.RestPath == null)
+ switch (format)
{
- this.RestPath = FindMatchingRestPath(httpMethod, pathInfo, out string contentType);
-
- if (contentType != null)
- ResponseContentType = contentType;
+ case "json": return "application/json";
+ case "xml": return "application/xml";
+ default: return null;
}
- return this.RestPath;
}
- public RestPath RestPath { get; set; }
-
- // Set from SSHHF.GetHandlerForPathInfo()
- public string ResponseContentType { get; set; }
-
- public async Task ProcessRequestAsync(HttpListenerHost appHost, IRequest httpReq, IResponse httpRes, ILogger logger, string operationName, CancellationToken cancellationToken)
+ public async Task ProcessRequestAsync(HttpListenerHost httpHost, IRequest httpReq, IResponse httpRes, ILogger logger, CancellationToken cancellationToken)
{
- var restPath = GetRestPath(httpReq.Verb, httpReq.PathInfo);
- if (restPath == null)
- {
- throw new NotSupportedException("No RestPath found for: " + httpReq.Verb + " " + httpReq.PathInfo);
- }
-
- SetRoute(httpReq, restPath);
+ httpReq.Items["__route"] = RestPath;
if (ResponseContentType != null)
+ {
httpReq.ResponseContentType = ResponseContentType;
+ }
- var request = httpReq.Dto = await CreateRequest(appHost, httpReq, restPath, logger).ConfigureAwait(false);
+ var request = httpReq.Dto = await CreateRequest(httpHost, httpReq, RestPath, logger).ConfigureAwait(false);
- appHost.ApplyRequestFilters(httpReq, httpRes, request);
+ httpHost.ApplyRequestFilters(httpReq, httpRes, request);
- var response = await appHost.ServiceController.Execute(appHost, request, httpReq).ConfigureAwait(false);
+ var response = await httpHost.ServiceController.Execute(httpHost, request, httpReq).ConfigureAwait(false);
// Apply response filters
- foreach (var responseFilter in appHost.ResponseFilters)
+ foreach (var responseFilter in httpHost.ResponseFilters)
{
responseFilter(httpReq, httpRes, response);
}
@@ -152,7 +145,11 @@ namespace Emby.Server.Implementations.Services
foreach (var name in request.QueryString.Keys)
{
- if (name == null) continue; //thank you ASP.NET
+ if (name == null)
+ {
+ // thank you ASP.NET
+ continue;
+ }
var values = request.QueryString[name];
if (values.Count == 1)
@@ -175,7 +172,11 @@ namespace Emby.Server.Implementations.Services
{
foreach (var name in formData.Keys)
{
- if (name == null) continue; //thank you ASP.NET
+ if (name == null)
+ {
+ // thank you ASP.NET
+ continue;
+ }
var values = formData.GetValues(name);
if (values.Count == 1)
@@ -210,7 +211,12 @@ namespace Emby.Server.Implementations.Services
foreach (var name in request.QueryString.Keys)
{
- if (name == null) continue; //thank you ASP.NET
+ if (name == null)
+ {
+ // thank you ASP.NET
+ continue;
+ }
+
map[name] = request.QueryString[name];
}
@@ -221,7 +227,12 @@ namespace Emby.Server.Implementations.Services
{
foreach (var name in formData.Keys)
{
- if (name == null) continue; //thank you ASP.NET
+ if (name == null)
+ {
+ // thank you ASP.NET
+ continue;
+ }
+
map[name] = formData[name];
}
}
@@ -229,17 +240,5 @@ namespace Emby.Server.Implementations.Services
return map;
}
-
- private static void SetRoute(IRequest req, RestPath route)
- {
- req.Items["__route"] = route;
- }
-
- private static RestPath GetRoute(IRequest req)
- {
- req.Items.TryGetValue("__route", out var route);
- return route as RestPath;
- }
}
-
}