// // Implemented by copying most of the MakeRelative code // public Uri MakeRelativeUri(Uri uri) { if (uri == null) throw new ArgumentNullException("uri"); if (Host != uri.Host || Scheme != uri.Scheme) return uri; string result = String.Empty; if (this.path != uri.path) { string[] segments = this.Segments; string[] segments2 = uri.Segments; int k = 0; int max = Math.Min(segments.Length, segments2.Length); for (; k < max; k++) if (segments[k] != segments2[k]) break; for (int i = k; i < segments.Length && segments[i].EndsWith("/"); i++) result += "../"; for (int i = k; i < segments2.Length; i++) result += segments2[i]; if (result == string.Empty) result = "./"; } uri.AppendQueryAndFragment(ref result); return new Uri(result, UriKind.Relative); }