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 @@
+