共用方式為


HOW TO:使用 HTTP 標頭快取頁面的多個版本

更新:2007 年 11 月

ASP.NET 可以讓您根據指定的 HTTP 標頭值,快取多個版本的的網頁。您可以在網頁被要求時,採用單一標頭、多個標頭或所有傳遞給您應用程式的標頭進行快取。

若要根據 HTTP 標頭值以宣告方式快取網頁的多個版本

  1. 在 ASP.NET Web 網頁中,使用必要的 DurationVaryByParamVaryByControl 屬性包含 @ OutputCache 指示詞。Duration 屬性必須設定為大於零的整數。如果您只想藉由 HTTP 標頭值進行快取,就必須將 VaryByParam 屬性設定為 "None"。

  2. @ OutputCache 指示詞中包含 VaryByHeader 屬性,並且將值設定為 HTTP 標頭的名稱,其中快取內容會根據這個 HTTP 標頭而有所不同。

    下列程式碼範例會快取網頁 60 秒,並且根據 Accept-Language HTTP 標頭傳遞的值設定快取網頁的各個版本:

    <%@ OutputCache Duration="60" VaryByParam="None" VaryByHeader="Accept-Language" %>
    
    注意事項:

    如果您想要快取內容根據多個標頭而有所不同,請包含以分號 (;) 隔開的標頭名稱清單。如果您想要快取的內容根據所有標頭值而有所不同,請將 VaryByHeader 屬性設定為星號 (*)。

若要以程式設計的方式根據 HTTP 標頭值快取網頁的多個版本

  1. 在網頁的 Page_Load 方法中,呼叫網頁之 Response 物件的 Cache 屬性上的 SetCacheabilitySetExpires 方法。

  2. 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。

請參閱

工作

HOW TO:以宣告方式設定 ASP.NET 網頁的快取性

HOW TO:以程式設計方式設定頁面的快取性

HOW TO:使用要求的瀏覽器快取頁面的多個版本

HOW TO:使用參數快取頁面的多個版本

HOW TO:使用自訂字串快取頁面的多個版本

概念

快取 ASP.NET Web 網頁

設定網頁的快取性

快取網頁的多個版本