public override RouteData GetRouteData(HttpContextBase httpContext) { var dataDest = base.GetRouteData(httpContext); if (dataDest == null) { return(null); } AliasInfo aliasInfo; if (!_aliasMap.TryGetAlias(_url, out aliasInfo)) { return(null); } //_aliasHolder.GetMap("Contents").TryGetAlias(_url, out aliasInfo); _routeValues = aliasInfo.RouteValues; dataDest.Values.Remove("area"); var dataSource = new Dictionary <string, string>(_routeValues); dataSource.Merge(dataDest.Values, true); dataDest.Values.ReplaceWith(dataSource); dataDest.DataTokens["area"] = dataSource["area"]; return(dataDest); }
public override RouteData GetRouteData(HttpContextBase httpContext) { // Get the full inbound request path var virtualPath = httpContext.Request.AppRelativeCurrentExecutionFilePath.Substring(2) + httpContext.Request.PathInfo; // Attempt to lookup RouteValues in the alias map IDictionary <string, string> routeValues; // TODO: Might as well have the lookup in AliasHolder... if (_aliasMap.TryGetAlias(virtualPath, out routeValues)) { // Construct RouteData from the route values var data = new RouteData(this, _routeHandler); foreach (var routeValue in routeValues) { var key = routeValue.Key; if (key.EndsWith("-")) { data.Values.Add(key.Substring(0, key.Length - 1), routeValue.Value); } else { data.Values.Add(key, routeValue.Value); } } data.Values["area"] = Area; data.DataTokens["area"] = Area; return(data); } return(null); }