Esempio n. 1
0
        //
        // 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);
        }