Fixes: U4-5291 UmbracoVirtualNodeRouteHandler throws exception: parameter culture cannot be null and publicizes some routing extensions.

This commit is contained in:
Shannon
2014-08-15 12:47:50 -06:00
parent 0fd37d708d
commit 4fe029a695
3 changed files with 36 additions and 5 deletions

View File

@@ -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;
}
}
}

View File

@@ -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);
}
}
}
}

View File

@@ -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
{
/// <summary>
/// Maps an Umbraco route with an UmbracoVirtualNodeRouteHandler
/// </summary>
/// <param name="routes"></param>
/// <param name="name"></param>
/// <param name="url"></param>
/// <param name="defaults"></param>
/// <param name="virtualNodeHandler"></param>
/// <param name="constraints"></param>
/// <param name="namespaces"></param>
/// <returns></returns>
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;
}
/// <summary>
/// Routes a webapi controller with namespaces
/// </summary>