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 + 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);
}