/// <summary> /// Applies no transformation, but does try to infer the content type if not set /// using the first file in the response (for js and css files only) /// </summary> /// <param name="context"></param> /// <param name="response"></param> public void Process(BundleContext context, BundleResponse response) { if (response == null) { throw new ArgumentNullException("response"); } // No transform done, just set the content type if specified if (!String.IsNullOrEmpty(ContentType)) { response.ContentType = ContentType; } else { // Try to infer content type from the bundle files if not specified. if (String.IsNullOrEmpty(response.ContentType) && response.Files != null) { // only set the content type if the first file has a js or css extension BundleFile firstFile = response.Files.FirstOrDefault(); if (firstFile != null) { string extension = VirtualPathUtility.GetExtension(firstFile.VirtualFile.VirtualPath); if (String.Equals(extension, ".js", StringComparison.OrdinalIgnoreCase)) { response.ContentType = JsMinify.JsContentType; } else if (String.Equals(extension, ".css", StringComparison.OrdinalIgnoreCase)) { response.ContentType = CssMinify.CssContentType; } } } } }
// Look for <fileName>.<replacementExtension>(.<ext>) in the diretory path private static BundleFile FindReplacementFile(BundleContext context, BundleFile file, string replacementExtension) { string directoryPath = Path.GetDirectoryName(file.VirtualFile.VirtualPath); string extension = Path.GetExtension(file.VirtualFile.Name); string fileName = Path.GetFileNameWithoutExtension(file.VirtualFile.Name); string replacementFileName = fileName + "." + replacementExtension; if (extension.Length > 0) { replacementFileName += extension; } // NOTE: VirtualPathUtility.Combine does not work as it uses '/' while // the default VPP requires '\' to find files, this might have result // in issues with Custom VPP implementations and this feature string replacementFilePath = Path.Combine(directoryPath, replacementFileName); string replacementIncludePath = Path.Combine(Path.GetDirectoryName(file.IncludedVirtualPath), replacementFileName); // Need to fixup the slashes replacementIncludePath = replacementIncludePath.Replace('\\', '/'); // NOTE: We cache every bundle response, so we shouldn't be hitting FileExists too often if (context.VirtualPathProvider.FileExists(replacementFilePath)) { return(new BundleFile(replacementIncludePath, context.VirtualPathProvider.GetFile(replacementFilePath))); } return(null); }