diff --git a/src/Orchard.Web/Modules/Orchard.Alias/Implementation/DefaultAliasService.cs b/src/Orchard.Web/Modules/Orchard.Alias/Implementation/DefaultAliasService.cs index fb1be8a4f..a203f45f6 100644 --- a/src/Orchard.Web/Modules/Orchard.Alias/Implementation/DefaultAliasService.cs +++ b/src/Orchard.Web/Modules/Orchard.Alias/Implementation/DefaultAliasService.cs @@ -83,14 +83,37 @@ namespace Orchard.Alias.Implementation { } public IEnumerable Lookup(RouteValueDictionary routeValues) { - if (routeValues.ContainsKey("area")) { - var map = _aliasHolder.GetMap(routeValues["area"].ToString()); + object area; + + if (routeValues.TryGetValue("area", out area)) { + // the route has an area, lookup in the specific alias map + + var map = _aliasHolder.GetMap(area.ToString()); + if (map == null) { return Enumerable.Empty(); } - return new[] { map.Locate(routeValues).Item2 }; + + var locate = map.Locate(routeValues); + + if (locate == null) { + return Enumerable.Empty(); + } + + return new[] { locate.Item2 }; } - return _aliasHolder.GetMaps().Where(map => map.Locate(routeValues) != null).Select(map => map.Locate(routeValues).Item2); + + // no specific area, lookup in all alias maps + var result = new List(); + foreach (var map in _aliasHolder.GetMaps()) { + var locate = map.Locate(routeValues); + + if (locate != null) { + result.Add(locate.Item2); + } + } + + return result; } public IEnumerable> List() {