由 彼得·凱爾納
快取標籤協助程式可讓您將 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
| 屬性類型 | 範例 | 預設 |
|---|---|---|
| 布林值 |
true、false |
true |
enabled 判斷是否快取由「快取標記輔助程式」所包含的內容。 預設值為 true。 如果設定為
範例:
<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-after或expires-on,則預設為 30 秒。
priority
| 屬性類型 | 範例 | 預設 |
|---|---|---|
CacheItemPriority |
High、Low、NeverRemove、Normal |
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>
vary-by-cookie
| 屬性類型 | 範例 |
|---|---|
| 繩子 |
.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
| 屬性類型 | 範例 | 預設 |
|---|---|---|
| 布林值 |
true、false |
false |
vary-by-culture 依請求中的文化特性變動快取的結果。 將屬性設定位true,結果會因CultureInfo.CurrentCulture和CultureInfo.CurrentUICulture而有所變化。
範例:
<cache vary-by-culture="true">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>
vary-by-header
| 屬性類型 | 範例 |
|---|---|
| 繩子 |
User-Agent、User-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
| 屬性類型 | 範例 |
|---|---|
| 繩子 |
Make、Make,Model |
vary-by-query 接受查詢字串 Keys 中以逗號分隔的 Query 清單,當任何列出的鍵值發生變更時,會觸發快取重新整理。
下列範例會監視Make和Model的值。 此範例會針對每個呈現給網頁伺服器的不同 Make 和 Model 內容進行快取:
<cache vary-by-query="Make,Model">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>
vary-by-route
| 屬性類型 | 範例 |
|---|---|
| 繩子 |
Make、Make,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
| 屬性類型 | 範例 | 預設 |
|---|---|---|
| 布林值 |
true、false |
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已過期時,會維護匿名狀態的快取。 如果使用者 未 通過驗證,則會維護快取。