2012-01-10 9 views
1

を失敗した私は、その場で自分のCSSを縮小化するには、次のコードを使用しています:使用してHttpModuleをするCSSファイル(縮小化)を変更します。でGZip CRCチェックが

namespace MyCMS.Modules 
{ 
    public class CSSModule : IHttpModule 
    { 
     void IHttpModule.Dispose() 
     { 
      throw new NotImplementedException(); 
     } 

     void IHttpModule.Init(HttpApplication context) 
     { 
      context.BeginRequest += new EventHandler(context_BeginRequest); 
     } 

     void context_BeginRequest(object sender, EventArgs e) 
     { 
      HttpApplication app = (HttpApplication)sender; 
      HttpContext context = app.Context; 

      if (app.Request.RawUrl.Contains(".css")) 
      { 
       context.Response.Filter = new CSSFilter(app.Response.Filter); 
      } 
     } 

     private class CSSFilter : Stream 
     { 
      public CSSFilter(Stream sink) { _sink = sink; } 
      private Stream _sink; 

      public override bool CanRead { get { return true; } } 
      public override bool CanSeek { get { return true; } } 
      public override bool CanWrite { get { return true; } } 
      public override void Flush() { _sink.Flush(); } 
      public override long Length { get { return 0; } } 
      private long _position; 
      public override long Position 
      { 
       get { return _position; } 
       set { _position = value; } 
      } 

      public override int Read(byte[] buffer, int offset, int count) { return _sink.Read(buffer, offset, count); } 
      public override long Seek(long offset, SeekOrigin origin) { return _sink.Seek(offset, origin); } 
      public override void SetLength(long value) { _sink.SetLength(value); } 
      public override void Close() { _sink.Close(); } 
      public override void Write(byte[] buffer, int offset, int count) 
      { 
       byte[] data = new byte[count]; 
       Buffer.BlockCopy(buffer, offset, data, 0, count); 
       string html = System.Text.Encoding.Default.GetString(buffer); 

       html = Yahoo.Yui.Compressor.CssCompressor.Compress(html,0, Yahoo.Yui.Compressor.CssCompressionType.Hybrid, true); 

       byte[] outdata = System.Text.Encoding.Default.GetBytes(html); 
       _sink.Write(outdata, 0, outdata.GetLength(0)); 
      } 
     } 
    } 
} 
問題がある

、有効になっているのgzip CRC(サーバー上で)失敗します。 ファイルの内容がXであり、今度はY(縮小)、 であり、元のCRCがXであり、Yではないため、なぜ失敗するのか分かります。

これを修正するにはどうすればよいですか?アウトモジュールSite.cssサイズで

私はCSSModuleとサンプルMVCアプリケーションを作成している

答えて

0

は〜6キロバイトでした。

モジュールSite.cssサイズ〜1kbを使用します。

お手伝いしますか?

リンク:http://www.mediafire.com/?a86fqg1zqy44ssc

+0

私はwebresource.axdを使用していないし、それを使用するのでは考えていない、私は例として、CSSモジュールを与えたが、私はいくつかのフィルタ出力を書き換える必要がありますファイル、それは私が質問を投稿した理由です。 – Dementic

関連する問題