/// <summary> /// Builds the query string based on the extra route values which were passed explicitly but not used in URL construction. /// </summary> /// <param name="valuesMediator">The route values mediator used for URL construction.</param> /// <param name="values">The current route values.</param> /// <returns>Returns the query string or <c>null</c> when it cannot be built.</returns> protected virtual string BuildQueryString(RouteValuesMediator valuesMediator, RouteValueDictionary values) { var queryString = new List <KeyValuePair <string, object> >(); foreach (var entry in values) { if (systemRouteValueKeys.Contains(entry.Key) || valuesMediator.VisitedKeys.Contains(entry.Key) || valuesMediator.InvalidatedKeys.Contains(entry.Key) || entry.Value == null || OutgoingDefaults.HasValue(entry.Key, entry.Value) || IncomingDefaults.HasValue(entry.Key, entry.Value)) { continue; } queryString.Add(entry); } if (queryString.Count == 0) { return(null); } var pairs = queryString.Select(e => HttpUtility.UrlEncode(e.Key) + "=" + HttpUtility.UrlEncode(e.Value.ToString())); return(string.Join("&", pairs)); }
/// <summary> /// Constructs the URL for the specified <paramref name="path"/> using the <paramref name="valuesMediator"/>. /// </summary> /// <param name="path">The path segments tree.</param> /// <param name="valuesMediator">The route values mediator.</param> /// <returns>Returns the constructed URL or <c>null</c> if the URL cannot be constructed.</returns> protected virtual string ConstructUrl(FullPathSegment path, RouteValuesMediator valuesMediator) { return((string)path.GetUrlPart((s) => valuesMediator.ResolveValue(s))); }
/// <summary> /// Extracts the route values for the specified <paramref name="path"/> from the <paramref name="match"/>. /// </summary> /// <param name="path">The path segments tree.</param> /// <param name="match">The successful match result to extract values from.</param> /// <param name="valuesMediator">The route values mediator.</param> protected virtual void ExtractRouteValues(FullPathSegment path, Match match, RouteValuesMediator valuesMediator) { path.ExtractRouteValues(match, valuesMediator.SetValue); }