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