HOW TO:使用 HTTP 標頭快取頁面的多個版本
更新:2007 年 11 月
ASP.NET 可以讓您根據指定的 HTTP 標頭值,快取多個版本的的網頁。您可以在網頁被要求時,採用單一標頭、多個標頭或所有傳遞給您應用程式的標頭進行快取。
若要根據 HTTP 標頭值以宣告方式快取網頁的多個版本
在 ASP.NET Web 網頁中,使用必要的 Duration 和 VaryByParam 或 VaryByControl 屬性包含 @ OutputCache 指示詞。Duration 屬性必須設定為大於零的整數。如果您只想藉由 HTTP 標頭值進行快取,就必須將 VaryByParam 屬性設定為 "None"。
在 @ OutputCache 指示詞中包含 VaryByHeader 屬性,並且將值設定為 HTTP 標頭的名稱,其中快取內容會根據這個 HTTP 標頭而有所不同。
下列程式碼範例會快取網頁 60 秒,並且根據 Accept-Language HTTP 標頭傳遞的值設定快取網頁的各個版本:
<%@ OutputCache Duration="60" VaryByParam="None" VaryByHeader="Accept-Language" %>
注意事項: 如果您想要快取內容根據多個標頭而有所不同,請包含以分號 (;) 隔開的標頭名稱清單。如果您想要快取的內容根據所有標頭值而有所不同,請將 VaryByHeader 屬性設定為星號 (*)。
若要以程式設計的方式根據 HTTP 標頭值快取網頁的多個版本
在網頁的 Page_Load 方法中,呼叫網頁之 Response 物件的 Cache 屬性上的 SetCacheability 和 SetExpires 方法。
將 VaryByHeaders 屬性中的 HTTP 標頭值設定為 true。
下列程式碼範例說明如何針對使用不同 Accept-Language HTTP 標頭值的要求,將網頁的多個版本快取一分鐘。
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; }
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Response.Cache.SetExpires(DateTime.Now.AddMinutes(1.0)) Response.Cache.SetCacheability(HttpCacheability.Public) Response.Cache.SetValidUntilExpires(True) Response.Cache.VaryByHeaders("Accept-Language") = true End Sub
注意事項: 如果想要快取的內容根據多個標頭而有所不同,就需要在 VaryByHeaders 屬性中設定多個值。如果想要根據所有標頭而有所不同,請將 VaryByHeaders["VaryByUnspecifiedParameters"] 設定為 true。