ASP.NET 允許在輸出緩存中緩存同一頁的多個版本。輸出緩存可能會因下列因素而異:
可以通過以下兩種方法來緩存頁輸出的多個版本:
使用@ OutputCache指令的屬性以聲明方式
使用HttpCachePolicy類的屬性和方法以編程方式。
@ OutputCache指令包括四個可用來緩存頁輸出的多個版本的屬性:
注意:您必須在任何@ OutputCache指令中包括VaryByParam屬性或VaryByControl屬性。但是,如果您不需要使緩存輸出因控制值或參數而異,則可以定義值為None的VaryByParam。
HttpCachePolicy類提供兩個屬性和一個方法,您可以通過它們以編程方式指定與以聲明方式所能設置的緩存配置相同的緩存配置。使用VaryByParams和VaryByHeaders屬性可以分別指定查詢字符串參數和標頭名稱作為緩存策略改變依據。使用SetVaryByCustom方法可以定義要作為輸出緩存改變依據的自定義字符串。
如果您的 Web 應用程序包含一個基于請求瀏覽器的類型創建不同輸出的頁,則可以按請求該頁的瀏覽器的主版本來緩存頁輸出的版本。
注意:主版本和瀏覽器類型信息是通過HttpBrowserCapabilities對象的MajorVersion屬性在當前請求中傳遞的。
基于瀏覽器類型以聲明方式緩存頁的多個版本:
下面的示例將導致持續緩存該頁達 10 秒。輸出將因瀏覽器類型而異。
<%@ OutputCache Duration="10" VaryByParam="None"VaryByCustom="browser" %>
基于瀏覽器類型以編程方式緩存頁的多個版本:
下面的代碼示例演示如何持續緩存頁的多個版本達 1 分鐘。輸出將因發出請求的瀏覽器的類型而異。

PRotected void Page_Load(object sender, EventArgs e){ Response.Cache.SetExpires(DateTime.Now.AddMinutes(1d)); Response.Cache.SetCacheability(HttpCacheability.Public); Response.Cache.SetValidUntilExpires(true); Response.Cache.SetVaryByCustom("browser");}View Code
有時候您希望緩存某頁,但是該頁可能基于查詢字符串參數的值或回發中與頁一起發送的值生成不同的輸出
可以根據作為查詢字符串值或窗體發送值發送的參數緩存頁響應的多個版本。
注意 |
在用于緩存目的時,ASP.NET 將帶相同鍵/值對的查詢字符串值或窗體發送值視為相同,無論參數傳遞的順序如何。然而,對于緩存目的,參數名是區分大小寫的,ASP.NET 將為大寫和小寫的參數名和參數值緩存不同版本的頁。 |
下面的代碼示例將頁緩存 60 秒,并指定將要根據City查詢字符串值或窗體發送參數緩存頁輸出的不同版本。
<%@ OutputCache Duration="60" VaryByParam="City" %>
注意 | ||||
如果要根據多個參數改變輸出緩存,請包括以分號 (;) 作為分隔符的參數名稱的列表。如果要根據所有的參數值來改變緩存,請將VaryByParam屬性設置為星號 (*)。下面的代碼示例演示如何通過City和Z
如何:使用 HTTP 標頭對某頁的各個版本進行緩存 使用 ASP.NET,您可以根據指定的 HTTP 標頭的值對某頁的多個版本進行緩存。當請求頁時,您可以指定按傳遞到應用程序的單個標頭、多個標頭或所有標頭進行緩存。 根據 HTTP 標頭值以聲明方式對某頁的各個版本進行緩存
下面的示例將頁緩存 60 秒,并根據隨Accept-LanguageHTTP 標頭傳遞的值設置要緩存的頁的版本: <%@ OutputCache Duration="60" VaryByParam="None" aryByHeader="Accept-Language" %> 注意:如果要根據多個標頭改變緩存的內容,請以分號 (;) 作為分隔符包括標頭名稱的列表。如果要根據所有標頭值改變緩存的內容,請將VaryByHeader屬性設置為星號 (*)。 根據 HTTP 標頭值以編程方式對某頁的各個版本進行緩存
下面的代碼示例演示如何為有不同的Accept-LanguageHTTP 標頭值的請求,將某頁的多個版本緩存一分鐘之久。 ![]() protected void Page_Load(object sender, EventArgs e){ Response.Cache.SetExpires(DateTime.Now.AddMinutes(1d)); Response.Cache.SetCacheability(HttpCacheability.Public); Response.Cache.SetValidUntilExpires(true); Response.Cache.VaryByHeaders["Accept-Language"] = true;}View Code注意:如果要根據多個標頭改變緩存的內容,需要在VaryByHeaders屬性中設置多個值。如果要根據所有標頭改變緩存的內容,請將VaryByHeaders["VaryByUnspecifiedParameters"] 設置為true。 如何:使用自定義字符串對頁的各個版本進行緩存 除了按瀏覽器類型和參數進行不同的輸出緩存行為外,還可以根據您定義的方法所返回的不同字符串對頁輸出的多個版本進行緩存。 根據自定義字符串對頁進行緩存時,應首先指定要使用的自定義字符串的標識符。然后在應用程序的 Global.asax 文件中創建一個方法,該方法接受此標識符,并且返回一個值,作為進行不同的輸出緩存行為的依據。 根據自定義字符串對頁輸出的多個版本進行緩存
下面的指令根據自定義字符串“minorversion”改變頁輸出。 <%@ OutputCache Duration="10" VaryByParam="None" VaryByCustom="minorversion" %>
下面的代碼示例演示如何將自定義字符串設置為“minorversion”。 C# Response.Cache.SetVaryByCustom("minorversion");
被重寫的方法接受您在VaryByCustom屬性或SetVaryByCustom方法中設置的字符串,作為它的arg參數。例如,有些頁可能根據請求瀏覽器的次版本進行緩存。對于這些頁,可以將VaryByCustom屬性設置為“minorversion”。然后,在被重寫的GetVaryByCustomString方法中,可以檢查arg參數,并根據arg參數的值是否為“minorversion”返回不同的字符串。 下面的代碼示例演示一個 Global.asax 文件,其中的GetVaryByCustomString方法 學習交流
熱門圖片
猜你喜歡的新聞
新聞熱點 2019-10-23 09:17:05
2019-10-21 09:20:02
2019-10-21 09:00:12
2019-09-26 08:57:12
2019-09-25 08:46:36
2019-09-25 08:15:43
疑難解答 |