public void Write(IAssetResult result, HttpContextBase context)
        {
            if (this.cacheHandler != null)
            {
                this.cacheHandler.ProcessRequest(context);
            }

            var response = context.Response;

            // TODO: Cache should vary on Accept-Encoding.
            // TODO: Should JavaScript templates be written on multiple lines when debugging?

            // Determine if the response can be gzipped.
            string acceptEncoding = context.Request.Headers["Accept-Encoding"];
            bool clientSupportsGzip = (acceptEncoding.Contains("gzip") || acceptEncoding.Contains("deflate"));
            string encoding = clientSupportsGzip ? "gzip" : "utf-8";

            byte[] output = Encoding.UTF8.GetBytes(result.Data);

            if (clientSupportsGzip)
            {
                // Convert the output to a GZip stream.
                using (var stream = new MemoryStream())
                using (var gzStream = new GZipStream(stream, CompressionMode.Compress))
                {
                    gzStream.Write(output, 0, output.Length);
                    gzStream.Close();
                    output = stream.ToArray();
                }
            }

            response.ContentType = result.ContentType;

            response.AppendHeader("Content-Encoding", encoding);
            response.OutputStream.Write(output, 0, output.Length);
        }
Ejemplo n.º 2
0
 public IgniteHttpHandler(IAssetResult result, IAssetResultWriter writer)
 {
     this.result = result;
     this.writer = writer;
 }