Exemplo n.º 1
0
        private static bool VirtualPathStartsWithVirtualPath(string virtualPath1, string virtualPath2)
        {
            if (virtualPath1 == null)
            {
                throw new ArgumentNullException("virtualPath1");
            }
            if (virtualPath2 == null)
            {
                throw new ArgumentNullException("virtualPath2");
            }
            if (!StringUtil.StringStartsWithIgnoreCase(virtualPath1, virtualPath2))
            {
                return(false);
            }
            int length = virtualPath2.Length;

            if (virtualPath1.Length != length)
            {
                if (length == 1)
                {
                    return(true);
                }
                if (virtualPath2[length - 1] == '/')
                {
                    return(true);
                }
                if (virtualPath1[length] != '/')
                {
                    return(false);
                }
            }
            return(true);
        }
Exemplo n.º 2
0
        internal static string MakeVirtualPathAppRelative(string virtualPath, string applicationPath, bool nullIfNotInApp)
        {
            if (virtualPath == null)
            {
                throw new ArgumentNullException("virtualPath");
            }
            int length = applicationPath.Length;
            int num2   = virtualPath.Length;

            if ((num2 == (length - 1)) && StringUtil.StringStartsWithIgnoreCase(applicationPath, virtualPath))
            {
                return("~/");
            }
            if (!VirtualPathStartsWithVirtualPath(virtualPath, applicationPath))
            {
                if (nullIfNotInApp)
                {
                    return(null);
                }
                return(virtualPath);
            }
            if (num2 == length)
            {
                return("~/");
            }
            if (length == 1)
            {
                return('~' + virtualPath);
            }
            return('~' + virtualPath.Substring(length - 1));
        }
Exemplo n.º 3
0
        // If a virtual path starts with the app path, make it start with
        // ~ instead, so that it becomes application agnostic
        // E.g. /MyApp/Sub/foo.aspx --> ~/Sub/foo.aspx
        internal static string MakeVirtualPathAppRelative(string virtualPath,
                                                          string applicationPath, bool nullIfNotInApp)
        {
            if (virtualPath == null)
            {
                throw new ArgumentNullException("virtualPath");
            }

            Debug.Assert(applicationPath[0] == '/');
            Debug.Assert(HasTrailingSlash(applicationPath));

            int appPathLength     = applicationPath.Length;
            int virtualPathLength = virtualPath.Length;

            // If virtualPath is the same as the app path, but without the ending slash,
            // treat it as if it were truly the app path (VSWhidbey 495949)
            if (virtualPathLength == appPathLength - 1)
            {
                if (StringUtil.StringStartsWithIgnoreCase(applicationPath, virtualPath))
                {
                    return(appRelativeCharacterString);
                }
            }

            if (!VirtualPathStartsWithVirtualPath(virtualPath, applicationPath))
            {
                // If it doesn't start with the app path, return either null or the input path
                if (nullIfNotInApp)
                {
                    return(null);
                }
                else
                {
                    return(virtualPath);
                }
            }

            // If they are the same, just return "~/"
            if (virtualPathLength == appPathLength)
            {
                return(appRelativeCharacterString);
            }

            // Special case for apps rooted at the root:
            if (appPathLength == 1)
            {
                return(appRelativeCharacter + virtualPath);
            }

            return(appRelativeCharacter + virtualPath.Substring(appPathLength - 1));
        }
Exemplo n.º 4
0
        private static bool VirtualPathStartsWithVirtualPath(string virtualPath1, string virtualPath2)
        {
            if (virtualPath1 == null)
            {
                throw new ArgumentNullException("virtualPath1");
            }

            if (virtualPath2 == null)
            {
                throw new ArgumentNullException("virtualPath2");
            }

            // if virtualPath1 as a string doesn't start with virtualPath2 as s string, then no for sure
            if (!StringUtil.StringStartsWithIgnoreCase(virtualPath1, virtualPath2))
            {
                return(false);
            }

            int virtualPath2Length = virtualPath2.Length;

            // same length - same path
            if (virtualPath1.Length == virtualPath2Length)
            {
                return(true);
            }

            // Special case for apps rooted at the root. VSWhidbey 286145
            if (virtualPath2Length == 1)
            {
                Debug.Assert(virtualPath2[0] == '/');
                return(true);
            }

            // If virtualPath2 ends with a '/', it's definitely a child
            if (virtualPath2[virtualPath2Length - 1] == '/')
            {
                return(true);
            }

            // If it doesn't, make sure the next char in virtualPath1 is a '/'.
            // e.g. /app1 vs /app11 (VSWhidbey 285038)
            if (virtualPath1[virtualPath2Length] != '/')
            {
                return(false);
            }

            // passed all checks
            return(true);
        }