private void AddFacetsToSegmentContext(ConcurrentDictionary<RouteFacetModel, HashSet<object>> routeFacets, SegmentContext segmentContext, RouteFacetModel[] facetNames, string nextSegment, string remaining, RouteFacetModel currentFacet) { if (String.IsNullOrEmpty(nextSegment)) { return; } var value = facetNames.FirstOrDefault(x => x.FacetName.Equals(nextSegment, StringComparison.OrdinalIgnoreCase)); if (value != null) { currentFacet = value; } else if (currentFacet != null) { var facetValue = _facetUrlCreator.GetFacetValue(facetNames, nextSegment); routeFacets.AddOrUpdate(currentFacet, (key) => new HashSet<object> { facetValue }, (key, list) => { list.Add(facetValue); return list; }); } segmentContext.RemainingPath = remaining; var segmentPair = segmentContext.GetNextValue(segmentContext.RemainingPath); nextSegment = _facetUrlCreator.GetFacetValue(facetNames, segmentPair.Next); AddFacetsToSegmentContext(routeFacets, segmentContext, facetNames, nextSegment, segmentPair.Remaining, currentFacet); }
public override object RoutePartial(PageData content, SegmentContext segmentContext) { var routedContet = base.RoutePartial(content, segmentContext); var segmentPair = segmentContext.GetNextValue(segmentContext.RemainingPath); if (String.IsNullOrEmpty(segmentPair.Next)) { return routedContet; } var facetNames = _facetUrlCreator.GetFacetModels().ToArray(); var nextSegment = _facetUrlCreator.GetFacetValue(facetNames, segmentPair.Next); if (String.IsNullOrEmpty(nextSegment)) { return routedContet; } var routeFacets = segmentContext.RouteData.Values[FacetUrlService.RouteFacets] as ConcurrentDictionary<RouteFacetModel, HashSet<object>>; if (routeFacets == null) { segmentContext.RouteData.Values[FacetUrlService.RouteFacets] = new ConcurrentDictionary<RouteFacetModel, HashSet<object>>(); routeFacets = (ConcurrentDictionary<RouteFacetModel, HashSet<object>>)segmentContext.RouteData.Values[FacetUrlService.RouteFacets]; } AddFacetsToSegmentContext(routeFacets, segmentContext, facetNames, nextSegment, segmentPair.Remaining, null); return routedContet; }