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