diff --git a/src/Orchard.Web/Modules/Orchard.Autoroute/Recipes/Builders/HomeAliasStep.cs b/src/Orchard.Web/Modules/Orchard.Autoroute/Recipes/Builders/HomeAliasStep.cs index 9c09db2c8..c974d3a55 100644 --- a/src/Orchard.Web/Modules/Orchard.Autoroute/Recipes/Builders/HomeAliasStep.cs +++ b/src/Orchard.Web/Modules/Orchard.Autoroute/Recipes/Builders/HomeAliasStep.cs @@ -31,7 +31,7 @@ namespace Orchard.Autoroute.Recipes.Builders { public override void Build(BuildContext context) { var homeAliasRoute = _homeAliasService.GetHomeRoute() ?? new RouteValueDictionary(); - var root = new XElement("HomeAlias", homeAliasRoute.Select(x => new XElement(Capitalize(x.Key), x.Value))); + var root = new XElement("HomeAlias"); var homePage = _homeAliasService.GetHomePage(VersionOptions.Latest); // If the home alias points to a content item, store its identifier in addition to the routevalues, @@ -41,6 +41,10 @@ namespace Orchard.Autoroute.Recipes.Builders { var homePageIdentifier = _contentManager.GetItemMetadata(homePage).Identity.ToString(); root.Attr("Id", homePageIdentifier); } + else { + // The alias does not point to a content item, so export the route values instead. + root.Add(homeAliasRoute.Select(x => new XElement(Capitalize(x.Key), x.Value)).ToArray()); + } context.RecipeDocument.Element("Orchard").Add(root); } diff --git a/src/Orchard.Web/Modules/Orchard.Autoroute/Recipes/Executors/HomeAliasStep.cs b/src/Orchard.Web/Modules/Orchard.Autoroute/Recipes/Executors/HomeAliasStep.cs index 1ba4f3d24..a05c39603 100644 --- a/src/Orchard.Web/Modules/Orchard.Autoroute/Recipes/Executors/HomeAliasStep.cs +++ b/src/Orchard.Web/Modules/Orchard.Autoroute/Recipes/Executors/HomeAliasStep.cs @@ -20,15 +20,16 @@ namespace Orchard.Autoroute.Recipes.Executors { public override void Execute(RecipeExecutionContext context) { var root = context.RecipeStep.Step; - var routeValueDictionary = root.Elements().ToDictionary(x => x.Name.LocalName.ToLower(), x => (object)x.Value); var homePageIdentifier = root.Attr("Id"); - var homePageIdentity = new ContentIdentity(homePageIdentifier); - var homePage = !String.IsNullOrEmpty(homePageIdentifier) ? _contentManager.ResolveIdentity(homePageIdentity) : default(ContentItem); + var homePageIdentity = !String.IsNullOrWhiteSpace(homePageIdentifier) ? new ContentIdentity(homePageIdentifier) : default(ContentIdentity); + var homePage = homePageIdentity != null ? _contentManager.ResolveIdentity(homePageIdentity) : default(ContentItem); if (homePage != null) _homeAliasService.PublishHomeAlias(homePage); - else + else { + var routeValueDictionary = root.Elements().ToDictionary(x => x.Name.LocalName.ToLower(), x => (object) x.Value); _homeAliasService.PublishHomeAlias(new RouteValueDictionary(routeValueDictionary)); + } } } } diff --git a/src/Orchard.Web/Modules/Orchard.Autoroute/Services/HomeAliasService.cs b/src/Orchard.Web/Modules/Orchard.Autoroute/Services/HomeAliasService.cs index 21a2f51c9..50c6ebde0 100644 --- a/src/Orchard.Web/Modules/Orchard.Autoroute/Services/HomeAliasService.cs +++ b/src/Orchard.Web/Modules/Orchard.Autoroute/Services/HomeAliasService.cs @@ -1,4 +1,5 @@ -using System.Web.Routing; +using System; +using System.Web.Routing; using Orchard.Alias; using Orchard.ContentManagement; @@ -20,12 +21,8 @@ namespace Orchard.Autoroute.Services { public int? GetHomePageId() { var homePageRoute = GetHomeRoute(); - var homePageId = - homePageRoute != null - ? homePageRoute.ContainsKey("id") - ? XmlHelper.Parse((string)homePageRoute["id"]) - : default(int?) - : default(int?); + var homePageIdValue = homePageRoute != null && homePageRoute.ContainsKey("id") ? (string)homePageRoute["id"] : default(string); + var homePageId = TryParseInt32(homePageIdValue); return homePageId; } @@ -51,5 +48,14 @@ namespace Orchard.Autoroute.Services { _aliasService.DeleteBySource(AliasSource); _aliasService.Set(HomeAlias, route, AliasSource); } + + private int? TryParseInt32(string value) { + int i; + + if (String.IsNullOrWhiteSpace(value) || !Int32.TryParse(value, out i)) + return null; + + return i; + } } } \ No newline at end of file