方法 : パラメータを使用してページのバージョンをキャッシュする
更新 : 2007 年 11 月
ページをキャッシュする際、クエリ文字列のパラメータ値やポストバック時にページと共に送信された値に基づいて、生成される出力が異なる場合があります。たとえば、ユーザーの状態に基づいてストアの場所を示すページがあるとします。このページで "state" クエリ文字列値が取得され、状態ごとに異なるバージョンでページが生成される場合があります。
クエリ文字列値やフォーム ポスト値として送信されたパラメータに基づいて、複数バージョンのページ応答をキャッシュできます。
メモ : |
---|
ASP.NET では、キーと値のペアが同じであるクエリ文字列値またはフォーム ポスト値は、パラメータが渡される順序にかかわらず、キャッシュの処理では同じものとして扱われます。ただし、キャッシュの処理ではパラメータ名の大文字と小文字が区別されるため、ASP.NET がキャッシュするページは、パラメータ名と値が大文字の場合と小文字の場合で、バージョンが異なります。 |
パラメータを使用し、複数バージョンのページ出力を宣言によってキャッシュするには
ASP.NET ページに、Duration 属性を持つ @ OutputCache ディレクティブを含めます。Duration 属性は必須で、0 より大きい整数に設定する必要があります。
@ OutputCache ディレクティブに、VaryByParam 属性を含め、その値をページを切り替えるクエリ文字列またはフォーム ポストのパラメータの名前に設定します。
ページを 60 秒でキャッシュし、City クエリ文字列値またはフォーム ポストのパラメータに基づいて、異なるバージョンのページ出力をキャッシュするように指定するコード例を次に示します。
<%@ OutputCache Duration="60" VaryByParam="City" %>
メモ : 出力キャッシュを複数のパラメータに基づいて切り替えるには、パラメータ名の一覧をセミコロン (;) で区切って記述します。すべてのパラメータ値ごとにキャッシュを切り替えるには、VaryByParam 属性をアスタリスク (*) に設定します。City パラメータと ZipCode パラメータに基づいてページ出力を切り替える方法を次のコード例に示します。
パラメータを使用し、複数バージョンのページ出力をプログラムによってキャッシュするには
ページの Page_Load イベントで、Response オブジェクトの Cache プロパティに対して SetCacheability メソッドと SetExpires メソッドを呼び出します。
Response オブジェクトの VaryByParams プロパティに対する引数としてパラメータ名を指定し、プロパティを true に設定します。
サーバーに着信した要求の Zip パラメータの値に応じて、異なるバージョンのページをキャッシュする方法を次のコード例に示します。
Response.Cache.SetExpires(DateTime.Now.AddMinutes(1.0)); Response.Cache.SetCacheability(HttpCacheability.Public); Response.Cache.SetValidUntilExpires(true); Response.Cache.VaryByParams["Zip"] = true;
Response.Cache.SetExpires(DateTime.Now.AddMinutes(1.0)) Response.Cache.SetCacheability(HttpCacheability.Public) Response.Cache.SetValidUntilExpires(True) Response.Cache.VaryByParams("Zip") = True
メモ : キャッシュされる内容を複数のパラメータに基づいて切り替える場合は、VaryByParams プロパティを複数回設定します。キャッシュする内容をすべてのヘッダー値に基づいて切り替えるには、VaryByHeader 属性の値をアスタリスク (*) に設定します。City パラメータと Zip パラメータに基づいてページ出力を切り替える方法を次のコード例に示します。
参照
処理手順
方法 : ASP.NET ページのキャッシュを宣言によって設定する
方法 : 要求元のブラウザを使用してページのバージョンをキャッシュする
方法 : HTTP ヘッダーを使用してページのバージョンをキャッシュする
方法 : カスタム文字列を使用してページの複数のバージョンをキャッシュする