public string MakeRelative (Uri toUri)
{
if ((this.Scheme != toUri.Scheme) ||
(this.Authority != toUri.Authority))
return toUri.ToString ();
string result = String.Empty;
if (this.path != toUri.path){
string [] segments = this.Segments;
string [] segments2 = toUri.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];
}
// Important: MakeRelative does not append fragment or query.
return result;
}