Exemplo n.º 1
0
        public static string GetPath(string relativePath)
        {
            if (relativePath.StartsWith("~"))
            {
                throw new ArgumentException(string.Format("bad path format {0} remove '~'", relativePath),
                                            "relativePath");
            }

            string result = relativePath;

            try
            {
                string ext = Path.GetExtension(relativePath).ToLowerInvariant();
                FixerConfigurationElement fixer = FixersByExt.ContainsKey(ext) ? FixersByExt[ext] : null;
                if (fixer != null && !string.IsNullOrEmpty(fixer.AppendBeforeExt))
                {
                    relativePath = relativePath.Substring(0, relativePath.LastIndexOf(ext))
                                   + fixer.AppendBeforeExt + ext;
                }
            }
            catch
            {
            }

            if (Appender != null)
            {
                if (Appender.Append.StartsWith("~"))
                {
                    string query = string.Empty;
                    //Rel path
                    if (relativePath.IndexOfAny(new[] { '?', '=', '&' }) != -1)
                    {
                        //Cut it
                        query        = relativePath.Substring(relativePath.IndexOf('?'));
                        relativePath = relativePath.Substring(0, relativePath.IndexOf('?'));
                    }
                    result = VirtualPathUtility.ToAbsolute(
                        string.Format("{0}/{1}{2}", Appender.Append.TrimEnd('/'),
                                      relativePath.TrimStart('/'), query)
                        );
                }
                else
                {
                    if (SecureHelper.IsSecure() && !string.IsNullOrEmpty(Appender.AppendSecure))
                    {
                        result = string.Format("{0}/{1}", Appender.AppendSecure.TrimEnd('/'),
                                               relativePath.TrimStart('/'));
                    }
                    else
                    {
                        //Append directly
                        result = string.Format("{0}/{1}", Appender.Append.TrimEnd('/'), relativePath.TrimStart('/'));
                    }
                }
            }
            //To LOWER! cause Amazon is CASE SENSITIVE!
            return(result.ToLowerInvariant());
        }
Exemplo n.º 2
0
        static WebPath()
        {
            FixersByExt = new Dictionary <string, FixerConfigurationElement>();
            var section = (StorageConfigurationSection)ConfigurationManager.GetSection(Schema.SECTION_NAME);

            if (section != null)
            {
                foreach (FixerConfigurationElement fixer in section.Fixers.Cast <FixerConfigurationElement>())
                {
                    FixerConfigurationElement fixer1 = fixer;
                    fixer.Extension
                    .Split(' ')
                    .Select(ext => ext.Trim().ToLowerInvariant())
                    .Where(ext => !string.IsNullOrEmpty(ext))
                    .ToList()
                    .ForEach(ext => FixersByExt[ext] = fixer1);
                }
                Appender = section.Appenders.Cast <AppenderConfigurationElement>().FirstOrDefault();
            }
        }
Exemplo n.º 3
0
        public static string GetPath(string relativePath)
        {
            if (relativePath.StartsWith("~"))
            {
                throw new ArgumentException(string.Format("bad path format {0} remove '~'", relativePath),
                                            "relativePath");
            }

            string result = relativePath;

            var ext = Path.GetExtension(relativePath).ToLowerInvariant();

            try
            {
                FixerConfigurationElement fixer = FixersByExt.ContainsKey(ext) ? FixersByExt[ext] : null;
                if (fixer != null && !string.IsNullOrEmpty(fixer.AppendBeforeExt))
                {
                    relativePath = relativePath.Substring(0, relativePath.LastIndexOf(ext))
                                   + fixer.AppendBeforeExt + ext;
                }
            }
            catch
            {
            }

            if (Appenders.Any())
            {
                var avaliableAppenders      = Appenders.Where(x => x.Extensions.Split('|').Contains(ext) || String.IsNullOrEmpty(ext));
                var avaliableAppendersCount = avaliableAppenders.LongCount();

                AppenderConfigurationElement appender;


                if (avaliableAppendersCount > 1)
                {
                    appender = avaliableAppenders.ToList()[(int)(relativePath.Length % avaliableAppendersCount)];
                }
                else if (avaliableAppendersCount == 1)
                {
                    appender = avaliableAppenders.First();
                }
                else
                {
                    appender = Appenders.First();
                }


                if (appender.Append.StartsWith("~"))
                {
                    string query = string.Empty;
                    //Rel path
                    if (relativePath.IndexOfAny(new[] { '?', '=', '&' }) != -1)
                    {
                        //Cut it
                        query        = relativePath.Substring(relativePath.IndexOf('?'));
                        relativePath = relativePath.Substring(0, relativePath.IndexOf('?'));
                    }
                    result = VirtualPathUtility.ToAbsolute(
                        string.Format("{0}/{1}{2}", appender.Append.TrimEnd('/'),
                                      relativePath.TrimStart('/'), query)
                        );
                }
                else
                {
                    if (SecureHelper.IsSecure() && !string.IsNullOrEmpty(appender.AppendSecure))
                    {
                        result = string.Format("{0}/{1}", appender.AppendSecure.TrimEnd('/'),
                                               relativePath.TrimStart('/'));
                    }
                    else
                    {
                        //Append directly
                        result = string.Format("{0}/{1}", appender.Append.TrimEnd('/'), relativePath.TrimStart('/'));
                    }
                }
            }
            //To LOWER! cause Amazon is CASE SENSITIVE!
            return(result.ToLowerInvariant());
        }