using Microsoft.Ajax.Utilities; using System; using System.IO; using System.Web; using System.Web.Caching; public class MinifyHandler : IHttpHandler { public void ProcessRequest(HttpContext context) { string file = context.Server.MapPath(context.Request.CurrentExecutionFilePath); string ext = Path.GetExtension(file); if (context.IsDebuggingEnabled) { context.Response.TransmitFile(file); } else { Minify(context.Response, file, ext); } SetHeaders(context.Response, file, ext); } private static void SetHeaders(HttpResponse response, string file, string ext) { response.ContentType = ext == ".css" ? "text/css" : "text/javascript"; response.Cache.SetLastModified(File.GetLastWriteTimeUtc(file)); response.Cache.SetValidUntilExpires(true); response.Cache.SetExpires(DateTime.Now.AddYears(1)); response.Cache.SetCacheability(HttpCacheability.ServerAndPrivate); response.Cache.SetVaryByCustom("Accept-Encoding"); response.AddCacheDependency(new CacheDependency(file)); } private static void Minify(HttpResponse response, string file, string ext) { string content = File.ReadAllText(file); Minifier minifier = new Minifier(); if (ext == ".css") { CssSettings settings = new CssSettings() { CommentMode = CssComment.None }; response.Write(minifier.MinifyStyleSheet(content, settings)); } else if (ext == ".js") { CodeSettings settings = new CodeSettings() { PreserveImportantComments = false }; response.Write(minifier.MinifyJavaScript(content, settings)); } } public bool IsReusable { get { return false; } } }