Fixes: U4-5291 UmbracoVirtualNodeRouteHandler throws exception: parameter culture cannot be null and publicizes some routing extensions.
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user