@ OutputCache
以宣告方式控制網頁中所含 ASP.NET Web 網頁或使用者控制項的輸出快取原則。 如需輸出快取的詳細資訊,請參閱 ASP.NET Caching Features。
<%@ OutputCache Duration="#ofseconds"
Location="Any | Client | Downstream | Server | None |
ServerAndClient "
Shared="True | False"
VaryByControl="controlname"
VaryByCustom="browser | customstring"
VaryByHeader="headers"
VaryByParam="parametername"
VaryByContentEncoding="encodings"
CacheProfile="cache profile name | ''"
NoStore="true | false"
SqlDependency="database/table name pair | CommandNotification"
ProviderName="Provider Name"
%>
屬性
Duration
網頁或使用者控制項被快取的時間,以秒為單位。 在網頁或使用者控制項上設定這個屬性,會建立 HTTP 從物件回應的過期原則,並且會自動快取網頁或使用者控制項輸出。注意
這是必要屬性。如果您不包含它的話,就會發生剖析器 (Parser) 錯誤。
Location
其中一個 OutputCacheLocation 列舉值。 預設值為 Any。注意
使用者控制項 (.ascx 檔案) 包含的 @ OutputCache 指示詞不支援這個屬性。
CacheProfile
要與網頁關聯之快取設定的名稱。 這是選擇性屬性,預設值為空字串 ("")。注意
使用者控制項 (.ascx 檔案) 包含的 @ OutputCache 指示詞不支援這個屬性。在網頁上指定此屬性時,其值必須符合 outputCacheSettings 區段下 outputCacheProfiles 中可用項目之一的名稱。如果名稱並不符合設定檔項目,便會擲回例外狀況。
NoStore
布林 (Boolean) 值,決定是否防止敏感資訊的次要儲存區。注意
使用者控制項 (.ascx 檔案) 包含的 @ OutputCache 指示詞不支援這個屬性。將這個屬性設定為 true,相當於下列在進行要求時執行的程式碼:
Response.Cache.SetNoStore();
ProviderName
字串值,可識別要使用的自訂輸出快取提供者。 如需詳細資訊,請參閱本主題的備註 一節,以及 Scott Guthrie 部落格中的項目Extensible Output Caching with ASP.NET 4 (VS 2010 and .NET 4.0 Series)注意
這個屬性僅在使用者控制項 (.ascx 檔案) 中受到支援。ASP.NET 網頁 (.aspx 檔案) 中包含的 @ OutputCache 指示詞不支援。
Shared
布林 (Boolean) 值,判斷使用者控制項輸出是否可以與多重網頁共用。 預設值為 false。 如需詳細資訊,請參閱<備註>一節。注意
ASP.NET Web 網頁 (.aspx 檔案) 包含的 @ OutputCache 指示詞不支援這個屬性。
SqlDependency
字串值,用以辨識網頁或控制項之輸出快取所相依的資料庫集和資料表名稱組。 請注意,SqlCacheDependency 類別會監視輸出快取所相依之資料庫中的資料表,因此當資料表中的項目更新時,這些項目便會在使用資料表架構的輪詢時從快取移除。 在以 CommandNotification 值使用通知時 (在 Microsoft SQL Server 2005 中),SqlDependency 類別最終會用來向 SQL Server 2005 伺服器註冊查詢通知。注意
SqlDependency 屬性的 CommandNotification 值只會在 Web 網頁 (.aspx) 上有效。使用者控制項只能使用運用 @ OutputCache 指示詞的資料表架構輪詢。
VaryByCustom
表示自訂輸出快取需求的任何文字。 如果這個屬性被賦予 browser 的值,那麼快取將會依瀏覽器名稱和主要版本資訊而不同。 如果輸入自訂字串,您就必須覆寫在應用程式之 Global.asax 檔案中的 GetVaryByCustomString 方法。VaryByHeader
用來變更輸出快取之分號分隔的 HTTP 標頭清單。 當這個屬性設定為多個頁首時,輸出快取便會包含每個指定頁首組合所要求文件的不同版本。注意
設定 VaryByHeader 屬性會啟用所有 HTTP 1.1 快取中的快取項目,而不只是 ASP.NET 快取。使用者控制項中的 @ OutputCache 指示詞不支援這個屬性。
VaryByParam
用來變更輸出快取的分號分隔的字串清單。 根據預設值,這些字串對應至使用 GET 方法屬性傳送的查詢字串值或使用 POST 方法傳送的參數。 當這個屬性被設定為多個參數時,輸出快取便會包含每個指定參數組合所要求文件的不同版本。 可能的值包括 none、星號 (*),以及任何有效的查詢字串或 POST 參數名稱。警告
當您在 ASP.NET Web 網頁和使用者控制項上使用 @ OutputCache 指示詞時,就必須使用這個屬性或是 VaryByControl 屬性。如果您不包含它的話,就會發生剖析器錯誤。如果您不想指定參數變更快取的內容,請將這個值設定為 none。如果想要以所有參數值變更輸出快取,請將這個屬性設定為星號 (*)。
VaryByControl
用來變更使用者控制項輸出快取的分號分隔字串清單。 這些字串表示在使用者控制項中所宣告之 ASP.NET 伺服器控制項的 ID 屬性值。 如需詳細資訊,請參閱Caching Portions of an ASP.NET Page。注意
當您在 ASP.NET Web 網頁和使用者控制項上使用 @ OutputCache 指示詞時,就必須使用這個屬性或是 VaryByParam 屬性。
VaryByContentEncodings
用來變更輸出快取的分號分隔字串清單。 VaryByContentEncodings 屬性 (Attribute) 會與 Accept-Encoding 標頭搭配使用,以判斷如何針對不同的內容編碼方式提供快取回應服務。 如需如何指定 Accept-Encoding 標頭的詳細資訊,請參閱 W3C 網站上超文字傳輸協定 -- HTTP/1.1 規格的第 14.3 節 (英文)。
備註
設定網頁輸出快取值的方式,與透過 Cache 屬性管理 SetExpires 和 SetCacheability 方法的方式是相同的。
如果 Web Form 網頁需要授權才能讓使用者檢視,輸出快取就會將 Cache-Control HTTP 標頭設定為 private。 如需所有這些主題的詳細資訊,請參閱Caching ASP.NET Pages。
如果將 Shared 屬性設定為 true,則可以透過多重 Web Form 網頁存取快取的使用者控制項輸出。 如果您沒有設定它為 true,預設行為會是快取每個網頁某個版本的使用者控制項輸出,該網頁包含使用者控制項。 藉由啟用 Shared 屬性,您有可能節省相當多的記憶體。 如需詳細資訊,請參閱Caching Portions of an ASP.NET Page。
範例
下列範例示範如何設定網頁或使用者控制項輸出快取時的持續時間。
<%@ OutputCache Duration="100" VaryByParam="none" %>
下一個程式碼範例則是示範如何指示輸出快取依據其位置與從表單之 POST 方法的計數表單參數,或是查詢字串,來快取網頁或使用者控制項。 從不同位置或以不同計數參數 (或兩者) 送達的每一個 HTTP 要求,會被快取十秒鐘。 任何具有相同參數值的後續要求會從快取回應,直到這個項目過期為止。
<%@ OutputCache Duration="10" VaryByParam="location;count" %>