共用方式為


ASP.NET Core MVC 中的 Cache Tag Helper (快取標籤協助程式)

彼得·凱爾納

快取標籤協助程式可讓您將 ASP.NET Core 應用程式的內容快取至內部 ASP.NET Core 快取提供者,以改善 Core 應用程式的效能。

如需標籤協助程式的概觀,請參閱 ASP.NET Core 中的標籤協助程式。

下列 Razor 標記會快取目前日期:

<cache>@DateTime.Now</cache>

對包含標籤協助程式之頁面的第一個要求會顯示目前日期。 其他要求會顯示快取值,直到快取到期 (預設為 20 分鐘) 或快取日期從快取中收回為止。

快取標籤輔助工具屬性

expires-after

屬性類型 Example 預設
TimeSpan @TimeSpan.FromSeconds(120)

expires-after 設定從第一次請求時間開始快取內容的時間長度。

範例:

<cache expires-after="@TimeSpan.FromSeconds(120)">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

enabled

屬性類型 範例 預設
布林值 truefalse true

enabled 判斷是否快取由「快取標記輔助程式」所包含的內容。 預設值為 true。 如果設定為 ,則轉譯的輸出< c1>不會 被快取。

範例:

<cache enabled="true">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

expires-on

屬性類型 Example
DateTimeOffset @new DateTime(2025,1,29,17,02,0)

expires-on 設定快取項目的絕對到期日。

下列範例會快取快取標籤協助程式的內容,直到 2025 年 1 月 29 日下午 5:02:

<cache expires-on="@new DateTime(2025,1,29,17,02,0)">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

expires-sliding

屬性類型 Example
TimeSpan @TimeSpan.FromSeconds(60)

設定若未存取其值時,快取項目應被移除的時間。

範例:

<cache expires-sliding="@TimeSpan.FromSeconds(60)">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

如果未定義expires-afterexpires-on,則預設為 30 秒。

priority

屬性類型 範例 預設
CacheItemPriority HighLowNeverRemoveNormal Normal

priority 為內建快取提供者提供快取收回指引。 Web 伺服器在面臨記憶體壓力時會優先清除 Low 快取專案。

範例:

<cache priority="High">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

priority 屬性不保證特定層級的快取保留。 CacheItemPriority 只是一個建議。 將此屬性設定為 NeverRemove 不保證一律保留快取的項目。 如需詳細資訊,請參閱 「其他資源」 一節中的主題。

快取標籤協助程式相依於 記憶體快取服務。 如果尚未新增服務,快取標籤協助程式會新增服務。

vary-by

屬性類型 Example
繩子 @Model

vary-by 允許自訂哪些資料可以快取。 當屬性的字串值所參考的物件變更時,會更新快取標籤協助程式的內容。 通常,模型值的字串串連會指派給此屬性。 實際上,這會導致一旦更新任何串聯的值,快取就會失效的情況。

下列範例假設轉譯檢視的控制器方法會加總兩個路由參數的整數值, myParam1 以及 myParam2,並將總和傳回為單一模型屬性。 當此總和變更時,Cache Tag Helper 的內容會重新轉譯並快取。

動作:

public IActionResult Index(string myParam1, string myParam2, string myParam3)
{
    int num1;
    int num2;
    int.TryParse(myParam1, out num1);
    int.TryParse(myParam2, out num2);
    return View(viewName, num1 + num2);
}

Index.cshtml

<cache vary-by="@Model">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>
屬性類型 範例
繩子 .AspNetCore.Identity.Application.AspNetCore.Identity.Application,HairColor

vary-by-cookie 接受以逗號分隔的名稱清單,這些名稱會在 cookie 值變更時 cookie 觸發快取重新整理。

下列範例會監視與 cookie 相關聯的 ASP.NET Core Identity。 當使用者通過驗證時,中的 Identitycookie 變更會觸發快取重新整理:

<cache vary-by-cookie=".AspNetCore.Identity.Application">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

vary-by-culture

屬性類型 範例 預設
布林值 truefalse false

vary-by-culture 依請求中的文化特性變動快取的結果。 將屬性設定位true,結果會因CultureInfo.CurrentCultureCultureInfo.CurrentUICulture而有所變化。

範例:

<cache vary-by-culture="true">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

vary-by-header

屬性類型 範例
繩子 User-AgentUser-Agent,content-encoding

vary-by-header 接受以逗號分隔的標頭值清單,這些標頭值會在變更時觸發快取重新整理。

下列範例會監視標頭值 User-Agent。 此範例會快取呈現給網頁伺服器的每個不同 User-Agent 內容。

<cache vary-by-header="User-Agent">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

vary-by-query

屬性類型 範例
繩子 MakeMake,Model

vary-by-query 接受查詢字串 Keys 中以逗號分隔的 Query 清單,當任何列出的鍵值發生變更時,會觸發快取重新整理。

下列範例會監視MakeModel的值。 此範例會針對每個呈現給網頁伺服器的不同 MakeModel 內容進行快取:

<cache vary-by-query="Make,Model">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

vary-by-route

屬性類型 範例
繩子 MakeMake,Model

vary-by-route 接受以逗號分隔的路由參數名稱清單,當路由資料參數值變更時,這些清單會觸發快取重新整理。

範例:

Startup.cs

routes.MapRoute(
    name: "default",
    template: "{controller=Home}/{action=Index}/{Make?}/{Model?}");

Index.cshtml

<cache vary-by-route="Make,Model">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

vary-by-user

屬性類型 範例 預設
布林值 truefalse false

vary-by-user 指定快取是否會在已登入使用者(或內容主體)變更時進行重設。 目前使用者也稱為「請求內容主體」,可藉由參照Razor在@User.Identity.Name檢視中查看。

下列範例會監視目前登入的使用者,以觸發快取重新整理:

<cache vary-by-user="true">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

使用此屬性會透過登入和登出週期維護快取中的內容。 當值為 true 時,驗證週期會使已驗證使用者的快取失效。 快取會失效,因為在驗證使用者時會產生新的唯一 cookie 值。 當沒有cookie或cookie已過期時,會維護匿名狀態的快取。 如果使用者 通過驗證,則會維護快取。

其他資源