1

Web サイトの Web ページを圧縮して速度を上げようとしています。JS と CSS の圧縮が完了しました。応答が出る前に aspx ページを圧縮したいと思います。私のウェブサイトのglobal.asaxファイルでこのコードを使用しています

void Application_Start(object sender, EventArgs e)
{
    HttpContext incoming = HttpContext.Current;
    string oldpath = incoming.Request.Path.ToLower();
    incoming.Response.Filter = new System.IO.Compression.GZipStream(incoming.Response.Filter, System.IO.Compression.CompressionMode.Compress);
    HttpContext.Current.Response.AppendHeader("Content-encoding", "gzip");
    HttpContext.Current.Response.Cache.VaryByHeaders["Accept-encoding"] = true;
}

Visual Studioでエラーが発生しません。しかし、このコードをIISに配置すると、エラー/例外が発生します

Exception Details: System.Web.HttpException: Request is not available in this context

誰かが私が何をすべきかを提案または説明できますか。

4

2 に答える 2

0

ここでの問題はとらえどころのないものです。組み込みの Visual Studio cassini Web サーバーは、最初の要求でアプリケーションを起動する古いパターンを使用して要求を実行します。これは、IISのマネージド パイプライン モード = クラシックと同じです。これは、リクエストが app_start をトリガーしたものであるため、すぐにアクセスできるリクエスト オブジェクトがあることを意味します。

ただし、マネージド パイプライン モード = Integratedの IIS 7 ボックスにこれを配置すると、失敗します。これは、パイプが統合されているため、アプリ プールが起動するとすぐにサイトが開始され、フックする要求オブジェクトがないためです。

この問題を解決するには、手作業ではなく、IIS でコンテンツを圧縮することをお勧めします。このリンクには、開始するための詳細が記載されています。ここでは、それがもたらす違いについての概要を示します。

アプリケーション内で圧縮を行うことに本当に決めている場合は、この例のように HttpModule として実装することをお勧めします。

編集: gzipping HttpModule hereの別の実装。

于 2012-07-06T05:42:49.800 に答える
0

Application_StartWeb アプリケーションの開始時に実行されますが、この時点ではまだページ リクエストが発生していないため、この開始はどのページ リクエストにも関連付けられていません。Requestでは利用できませんApplication_Start

代わりに使用できますServer.MapPath()

于 2012-07-06T05:35:55.003 に答える