aboutsummaryrefslogtreecommitdiff
path: root/Emby.Server.Implementations/MvcRoutePrefix.cs
diff options
context:
space:
mode:
authorClaus Vium <clausvium@gmail.com>2019-07-02 12:21:54 +0200
committerClaus Vium <clausvium@gmail.com>2019-11-19 21:48:16 +0100
commite5d57bd82f9a089b7c19ea357efd2b8b34fd418b (patch)
treec6eb554c5e8a33af9cb170fbbbb1779d108cbae8 /Emby.Server.Implementations/MvcRoutePrefix.cs
parentc0d10800ab6c029b891af5caf5d0fccaf76816d3 (diff)
Move StartupWizard to ASP.NET Web Api
Diffstat (limited to 'Emby.Server.Implementations/MvcRoutePrefix.cs')
-rw-r--r--Emby.Server.Implementations/MvcRoutePrefix.cs48
1 files changed, 48 insertions, 0 deletions
diff --git a/Emby.Server.Implementations/MvcRoutePrefix.cs b/Emby.Server.Implementations/MvcRoutePrefix.cs
new file mode 100644
index 000000000..fb26ae09d
--- /dev/null
+++ b/Emby.Server.Implementations/MvcRoutePrefix.cs
@@ -0,0 +1,48 @@
+using System.Collections.Generic;
+using System.Linq;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Mvc.ApplicationModels;
+
+namespace Emby.Server.Implementations
+{
+ public static class MvcRoutePrefix
+ {
+ public static void UseGeneralRoutePrefix(this MvcOptions opts, params string[] prefixes)
+ {
+ opts.Conventions.Insert(0, new RoutePrefixConvention(prefixes));
+ }
+
+ internal class RoutePrefixConvention : IApplicationModelConvention
+ {
+ private readonly AttributeRouteModel[] _routePrefixes;
+
+ public RoutePrefixConvention(IEnumerable<string> prefixes)
+ {
+ _routePrefixes = prefixes.Select(p => new AttributeRouteModel(new RouteAttribute(p))).ToArray();
+ }
+
+ public void Apply(ApplicationModel application)
+ {
+ foreach (var controller in application.Controllers)
+ {
+ if (controller.Selectors == null)
+ {
+ continue;
+ }
+
+ var newSelectors = new List<SelectorModel>();
+ foreach (var selector in controller.Selectors)
+ {
+ newSelectors.AddRange(_routePrefixes.Select(routePrefix => new SelectorModel(selector)
+ {
+ AttributeRouteModel = AttributeRouteModel.CombineAttributeRouteModel(routePrefix, selector.AttributeRouteModel)
+ }));
+ }
+
+ controller.Selectors.Clear();
+ newSelectors.ForEach(selector => controller.Selectors.Add(selector));
+ }
+ }
+ }
+ }
+}