diff --git a/src/Orchard/Mvc/Extensions/RouteExtention.cs b/src/Orchard/Mvc/Extensions/RouteExtention.cs new file mode 100644 index 000000000..882f64989 --- /dev/null +++ b/src/Orchard/Mvc/Extensions/RouteExtention.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Web.Routing; +using System.Web.Mvc; + +namespace Orchard.Mvc{ + + public static class RouteExtention{ + public static string GetAreaName(this RouteBase route){ + var routeWithArea = route as IRouteWithArea; + if (routeWithArea != null) { + return routeWithArea.Area; + } + + var castRoute = route as Route; + if (castRoute != null && castRoute.DataTokens != null) { + return castRoute.DataTokens["area"] as string; + } + + return null; + } + + public static string GetAreaName(this RouteData routeData){ + object area; + if (routeData.DataTokens.TryGetValue("area", out area)) + { + return area as string; + } + + return GetAreaName(routeData.Route); + } + } +} diff --git a/src/Orchard/Mvc/OrchardControllerFactory.cs b/src/Orchard/Mvc/OrchardControllerFactory.cs index e0330a326..5dc828412 100644 --- a/src/Orchard/Mvc/OrchardControllerFactory.cs +++ b/src/Orchard/Mvc/OrchardControllerFactory.cs @@ -30,7 +30,7 @@ namespace Orchard.Mvc { var routeData = requestContext.RouteData; // Determine the area name for the request, and fall back to stock orchard controllers - var areaName = GetAreaName(routeData); + var areaName = routeData.GetAreaName(); // Service name pattern matches the identification strategy var serviceKey = (areaName + "/" + controllerName).ToLowerInvariant(); @@ -57,27 +57,5 @@ namespace Orchard.Mvc { return null; } - public static string GetAreaName(RouteBase route) { - var routeWithArea = route as IRouteWithArea; - if (routeWithArea != null) { - return routeWithArea.Area; - } - - var castRoute = route as Route; - if (castRoute != null && castRoute.DataTokens != null) { - return castRoute.DataTokens["area"] as string; - } - - return null; - } - - public static string GetAreaName(RouteData routeData) { - object area; - if (routeData.DataTokens.TryGetValue("area", out area)) { - return area as string; - } - - return GetAreaName(routeData.Route); - } } } \ No newline at end of file diff --git a/src/Orchard/Mvc/Routes/ShellRoute.cs b/src/Orchard/Mvc/Routes/ShellRoute.cs index f8e5a540b..0e7e50083 100644 --- a/src/Orchard/Mvc/Routes/ShellRoute.cs +++ b/src/Orchard/Mvc/Routes/ShellRoute.cs @@ -25,15 +25,7 @@ namespace Orchard.Mvc.Routes { if (!string.IsNullOrEmpty(_shellSettings.RequestUrlPrefix)) _urlPrefix = new UrlPrefix(_shellSettings.RequestUrlPrefix); - var routeWithArea = route as IRouteWithArea; - if (routeWithArea != null) { - Area = routeWithArea.Area; - } - - var routeWithDataTokens = route as Route; - if ((routeWithDataTokens != null) && (routeWithDataTokens.DataTokens != null)) { - Area = (routeWithDataTokens.DataTokens["area"] as string); - } + Area = route.GetAreaName(); } public string ShellSettingsName { get { return _shellSettings.Name; } } diff --git a/src/Orchard/Orchard.Framework.csproj b/src/Orchard/Orchard.Framework.csproj index be5812871..df5cdec31 100644 --- a/src/Orchard/Orchard.Framework.csproj +++ b/src/Orchard/Orchard.Framework.csproj @@ -183,6 +183,7 @@ +