public static string GetThemedFile(string file, string theme) { // n2's zip provider doesn't support ../../, so lets try to fix it manually var regex = new Regex(@"([^/]*/\.\./)"); while (regex.IsMatch(file)) { file = regex.Replace(file, ""); } file = file.Replace("\\\\", "\\").Replace("\\", "/"); if (file.StartsWith("/")) file = "~" + file; if (!IsThemeable(file)) return file; HttpContext.Current.Items["theme"] = theme; var themeDirectory = Url.ResolveTokens("{ThemesUrl}").ToLower(); var themedLocation = file.Replace("~" + themeDirectory, ""); themedLocation = themedLocation.Substring(themedLocation.IndexOf("/", StringComparison.Ordinal)); var helper = new UrlHelper(HttpContext.Current.Request.RequestContext); var result = helper.ThemedContent(themedLocation); if (System.Web.Hosting.HostingEnvironment.VirtualPathProvider.FileExists(result)) { return System.Web.Hosting.HostingEnvironment.VirtualPathProvider.GetFile(result).VirtualPath; } return result; }