diff --git a/src/Umbraco.Web/Mvc/UmbracoVirtualNodeByIdRouteHandler.cs b/src/Umbraco.Web/Mvc/UmbracoVirtualNodeByIdRouteHandler.cs index cd50705cc8..94cd71673b 100644 --- a/src/Umbraco.Web/Mvc/UmbracoVirtualNodeByIdRouteHandler.cs +++ b/src/Umbraco.Web/Mvc/UmbracoVirtualNodeByIdRouteHandler.cs @@ -3,11 +3,11 @@ using Umbraco.Core.Models; namespace Umbraco.Web.Mvc { - public abstract class UmbracoVirtualNodeByIdRouteHandler : UmbracoVirtualNodeRouteHandler + public class UmbracoVirtualNodeByIdRouteHandler : UmbracoVirtualNodeRouteHandler { private readonly int _realNodeId; - protected UmbracoVirtualNodeByIdRouteHandler(int realNodeId) + public UmbracoVirtualNodeByIdRouteHandler(int realNodeId) { _realNodeId = realNodeId; } @@ -20,6 +20,9 @@ namespace Umbraco.Web.Mvc return FindContent(requestContext, umbracoContext, byId); } - protected abstract IPublishedContent FindContent(RequestContext requestContext, UmbracoContext umbracoContext, IPublishedContent baseContent); + protected virtual IPublishedContent FindContent(RequestContext requestContext, UmbracoContext umbracoContext, IPublishedContent baseContent) + { + return baseContent; + } } } \ No newline at end of file diff --git a/src/Umbraco.Web/Mvc/UmbracoVirtualNodeRouteHandler.cs b/src/Umbraco.Web/Mvc/UmbracoVirtualNodeRouteHandler.cs index f8cd1f6006..a5c97a9651 100644 --- a/src/Umbraco.Web/Mvc/UmbracoVirtualNodeRouteHandler.cs +++ b/src/Umbraco.Web/Mvc/UmbracoVirtualNodeRouteHandler.cs @@ -1,4 +1,6 @@ -using System.Web; +using System.Globalization; +using System.Linq; +using System.Web; using System.Web.Mvc; using System.Web.Routing; using Umbraco.Core.Models; @@ -42,6 +44,13 @@ namespace Umbraco.Web.Mvc protected virtual void PreparePublishedContentRequest(PublishedContentRequest publishedContentRequest) { + //need to set the culture for this to work + if (publishedContentRequest.Culture == null) + { + //none specified so get the default + var defaultLanguage = global::umbraco.cms.businesslogic.language.Language.GetAllAsList().FirstOrDefault(); + publishedContentRequest.Culture = defaultLanguage == null ? CultureInfo.CurrentUICulture : new CultureInfo(defaultLanguage.CultureAlias); + } } } } diff --git a/src/Umbraco.Web/RouteCollectionExtensions.cs b/src/Umbraco.Web/RouteCollectionExtensions.cs index 1d94eaef61..586ecf6476 100644 --- a/src/Umbraco.Web/RouteCollectionExtensions.cs +++ b/src/Umbraco.Web/RouteCollectionExtensions.cs @@ -4,11 +4,30 @@ using System.Linq; using System.Web.Mvc; using System.Web.Routing; using System.Web.Http; +using Umbraco.Web.Mvc; namespace Umbraco.Web { - internal static class RouteCollectionExtensions + public static class RouteCollectionExtensions { + /// + /// Maps an Umbraco route with an UmbracoVirtualNodeRouteHandler + /// + /// + /// + /// + /// + /// + /// + /// + /// + public static Route MapUmbracoRoute(this RouteCollection routes, string name, string url, object defaults, UmbracoVirtualNodeRouteHandler virtualNodeHandler, object constraints = null, string[] namespaces = null) + { + var route = routes.MapRoute(name, url, defaults, constraints, namespaces); + route.RouteHandler = virtualNodeHandler; + return route; + } + /// /// Routes a webapi controller with namespaces ///