バンドルが MVC4 に登録されている場合、受信http
リクエストを「傍受」する役割は何/bundles/someBundle?v=1hDzBpmYJm4Iu-OjRN1YqS1WeNThVl0kStLJGP8WCr41
ですか? また、各バンドルのハッシュは(最初のリクエストで)1回だけ計算されるため、実際に保持されている場所はどこですか - そして404
、入ってくるハッシュが一致しない場合に返すことは可能ですか
3 に答える
~/bundles/someBundle の受信 http リクエストを「傍受」する責任があるのは何ですか?
への着信要求はありません~/bundles/someBundle
。Scripts.Render
サーバー上で (同じ HTTP 要求内で)使用しているのはサーバー側のヘルパーであり、この値を解釈し、結果の HTML に正しい URL を吐き出します。
また、各バンドルのハッシュは (最初のリクエストで) 1 回だけ計算されるため、実際に保持されている場所はどこですか?
実際のバンドルの内容は、サーバー側のキャッシュに保存されます: HttpContext.Cache
. Scripts.Render
実際のハッシュは、ヘルパーを使用するたびに計算されるこのコンテンツの SHA256 ハッシュを表します。
アップデート:
これSystem.Web.Optimization.BundleModule
は、System.Web.Optimization アセンブリを参照するときに自動登録されるもので、URL などへの要求をインターセプトし/bundles/someBundle?v=1hDzBpmYJm4Iu-OjRN1YqS1WeNThVl0kStLJGP8WCr41
て実際のコンテンツを返す役割を果たします。
提供している実際のファイルの内容に基づいてパラメーターを使用してクエリ文字列を追加する理由は、キャッシュの問題を解決するためです。したがって、ブラウザにこのリクエストを長期間キャッシュして、後続のページの読み込み時間を短縮するように通知できます。
したがって、このバンドル メカニズムの開発者にとって、そのパラメータが何であるかに違いはありません。唯一重要なことは、スクリプトまたは css の内容を変更すると、ハッシュが変更され、クライアントのブラウザーがサーバーから新しいファイルを要求するように強制されることです。
このリクエストをインターセプトする責任があるものについては、MVC のソース コードが codeplex で入手できますが、ルーティングに正しく接続されていると思います。
Web プロジェクトのフォルダー App_Start に BundleConfig.cs というファイルが必要です。
そのセクションは基本的に、URL「/bundles/something」をいくつかのスクリプトにリンクしています。リリース モード (デバッグがアクティブ化されていない) でサイトにアクセスすると、スクリプトが自動的に 1 つのメモリ内ファイルにマージされ、スクリプトが最小化され、キャッシュ ヘッダーが要求に追加され、ファイル コンテンツのハッシュが生成されます。
デバッグ中の場合は、デバッグを容易にするためにすべてのスクリプトを分離する必要があります。
そのファイルに表示されるバンドルを再定義するか、独自のものを宣言します。
楽しみ。