// // 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 ("/", StringComparison.Ordinal); 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); }
// // Implemented by copying most of the MakeRelative code // public Uri MakeRelativeUri (Uri uri) { #if NET_4_0 || MOONLIGHT if (uri == null) throw new ArgumentNullException ("uri"); #endif 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 + 1; i < segments.Length; i++) result += "../"; for (int i = k; i < segments2.Length; i++) result += segments2 [i]; } uri.AppendQueryAndFragment (ref result); return new Uri (result, UriKind.Relative); }
// // Implemented by copying most of the MakeRelative code // public Uri MakeRelativeUri (Uri uri) { #if NET_4_0 || MOONLIGHT || MOBILE if (uri == null) throw new ArgumentNullException ("uri"); #endif 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 + 1; i < segments.Length; i++) result += "../"; for (int i = k; i < segments2.Length; i++) result += segments2 [i]; // if there is more than 1 segment and if the last segment of segments // ends with separator char, assume its a directory and prepend "../" if (segments.Length > 1) { var lastSegment = segments [segments.Length - 1]; if (lastSegment.EndsWith ("/")) result = "../" + result; } } uri.AppendQueryAndFragment (ref result); return new Uri (result, UriKind.Relative); }