|
|
|
|
|
asp.net 的 @OutputCache
,是以聲明方式控制 ASP.NET 頁面或頁面中包含的用戶控件的輸出緩存策略。
@OutputCache
包含有12個(gè)屬性,本文將詳細(xì)介紹它們的含義及用法。
句法
<%@ 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"
%>
緩存頁面或用戶控件的時(shí)間(以秒為單位)。在頁面或用戶控件上設(shè)置此屬性可為對(duì)象的 HTTP 響應(yīng)建立過期策略,并將自動(dòng)緩存頁面或用戶控件輸出。
筆記
此屬性是必需的。如果不包含它,則會(huì)發(fā)生解析器錯(cuò)誤。
枚舉值之一。默認(rèn)值為 Any
。
筆記
用戶控件(.ascx 文件)中包含的 @OutputCache 指令不支持此屬性。
與頁面關(guān)聯(lián)的緩存設(shè)置的名稱。這是一個(gè)可選屬性,默認(rèn)為空字符串 ("")。
筆記
用戶控件(.ascx 文件)中包含的 @OutputCache
指令不支持此屬性。在頁面上指定時(shí),該值必須與 outputCacheSettings
部分下的 outputCacheProfiles
元素中可用條目之一的名稱相匹配。如果名稱與配置文件條目不匹配,則會(huì)拋出異常。
一個(gè)布爾值,決定是否防止二次存儲(chǔ)敏感信息。
筆記
用戶控件(.ascx 文件)中包含的 @OutputCache
指令不支持此屬性。將此屬性設(shè)置為 true 等效于在請(qǐng)求期間執(zhí)行以下代碼:Response.Cache.SetNoStore();
一個(gè)字符串值,用于標(biāo)識(shí)要使用的自定義輸出緩存提供程序。
筆記
此屬性僅在用戶控件(.ascx 文件)中受支持。它不支持 ASP.NET 頁面(.aspx 文件)中包含的 @OutputCache
指令。
一個(gè)布爾值,它確定用戶控件輸出是否可以與多個(gè)頁面共享。默認(rèn)為false。
筆記
ASP.NET 頁面(.aspx 文件)中包含的 @OutputCache
指令不支持此屬性。
一個(gè)字符串值,它標(biāo)識(shí)頁面或控件的輸出緩存所依賴的一組數(shù)據(jù)庫和表名稱對(duì)。請(qǐng)注意,SqlCacheDependency
類監(jiān)視輸出緩存所依賴的數(shù)據(jù)庫中的表,因此當(dāng)表中的項(xiàng)目更新時(shí),這些項(xiàng)目會(huì)在使用基于表的輪詢時(shí)從緩存中刪除。當(dāng)使用值為 CommandNotification
的通知(在 Microsoft SQL Server 2005 中)時(shí),最終會(huì)使用一個(gè)SqlDependency
類來向 SQL Server 2005 服務(wù)器注冊(cè)查詢通知。
筆記
SqlDependency
屬性的 CommandNotification
值僅在 Web (.aspx) 頁面上有效。用戶控件只能通過 @OutputCache
指令使用基于表的輪詢。
表示自定義輸出緩存要求的任何文本。如果此屬性的值為瀏覽器,則緩存會(huì)因?yàn)g覽器名稱和主要版本信息而異。如果輸入自定義字符串,則必須覆蓋應(yīng)用程序的 Global.asax 文件中的GetVaryByCustomString
方法。
用于改變輸出緩存的以分號(hào)分隔的 HTTP 標(biāo)頭列表。當(dāng)此屬性設(shè)置為多個(gè)標(biāo)頭時(shí),輸出緩存包含指定標(biāo)頭的每個(gè)組合的不同版本的請(qǐng)求文檔。
筆記
設(shè)置 VaryByHeader
屬性可以在所有 HTTP 1.1 版緩存中啟用緩存項(xiàng)目,而不僅僅是 ASP.NET 緩存。用戶控件中的 @OutputCache
指令不支持此屬性。
用于改變輸出緩存的以分號(hào)分隔的字符串列表。默認(rèn)情況下,這些字符串對(duì)應(yīng)于使用 GET 方法屬性發(fā)送的查詢字符串值,或使用 POST 方法發(fā)送的參數(shù)。當(dāng)此屬性設(shè)置為多個(gè)參數(shù)時(shí),輸出緩存包含指定參數(shù)的每個(gè)組合的不同版本的請(qǐng)求文檔。可能的值包括無、星號(hào) (*) 和任何有效的查詢字符串或 POST 參數(shù)名稱。
在 ASP.NET 頁面和用戶控件上使用 @OutputCache
指令時(shí),需要此屬性或 VaryByControl
屬性。如果你未能包含它,則會(huì)發(fā)生解析器錯(cuò)誤。如果你不想指定參數(shù)來改變緩存的內(nèi)容,請(qǐng)將值設(shè)置為 none。如果要通過所有參數(shù)值改變輸出緩存,請(qǐng)將屬性設(shè)置為星號(hào) (*)。
一個(gè)以分號(hào)分隔的字符串列表,用于改變用戶控件的輸出緩存。這些字符串表示在用戶控件中聲明的 ASP.NET 服務(wù)器控件的 ID 屬性值。
筆記
在 ASP.NET 頁面和用戶控件上使用 @OutputCache 指令時(shí),需要此屬性或 VaryByParam 屬性。
用于改變輸出緩存的以分號(hào)分隔的字符串列表。VaryByContentEncodings
屬性與 Accept-Encoding
標(biāo)頭一起使用,以確定如何為不同的內(nèi)容編碼提供緩存的響應(yīng)。
評(píng)論
設(shè)置頁面OutputCache
的值與通過Cache
屬性操作SetExpires
和SetCacheability
方法相同。
如果 Web 窗體頁面需要用戶授權(quán)才能查看,則OutputCache
會(huì)將 Cache-Control HTTP
標(biāo)頭設(shè)置為私有。
如果將 Shared
屬性設(shè)置為 true,則多個(gè) Web 窗體頁面可以訪問緩存的用戶控件輸出。如果不將其設(shè)置為 true,則默認(rèn)行為是為包含該用戶控件的每個(gè)頁面緩存一個(gè)版本的用戶控件輸出。通過啟用 Shared
屬性,你可以潛在地節(jié)省大量?jī)?nèi)存。
例子
以下代碼示例演示如何設(shè)置頁面或用戶控件OutputCache
的持續(xù)時(shí)間。
<%@ OutputCache Duration="100" VaryByParam="none" %>
下一個(gè)代碼示例演示如何指示輸出緩存根據(jù)來自表單的 POST 方法或查詢字符串的位置和計(jì)數(shù)表單參數(shù)來緩存頁面或用戶控件。每個(gè)帶有不同位置或計(jì)數(shù)參數(shù)(或兩者)的 HTTP 請(qǐng)求都會(huì)緩存十秒。任何具有相同參數(shù)值的后續(xù)請(qǐng)求都將從緩存中得到滿足,直到條目過期為止。
<%@ OutputCache Duration="10" VaryByParam="location;count" %>
相關(guān)文章