提問
ASP.NET Core 中的響應緩存中間件
回答
-
緩存條件
請求必鬚生成帶有 200 (OK) 狀態代碼的服務器響應。
請求方法必須是 GET 或 HEAD。
響應緩存中間件必須放置在需要緩存的中間件之前。 有關詳細信息,請參閱 ASP.NET Core 中間件。
不能出現 Authorization 標頭。
Cache-Control 標頭參數必須是有效的,並且必須將響應標記爲 public 而不是 private。
如果 Cache-Control 不存在,則不能出現 Pragma: no-cache 標頭,因爲 Cache-Control 標頭在存在時會覆蓋 Pragma 標頭。
不能出現 Set-Cookie 標頭。
Vary 標頭參數必須有效且不等於 *。
Content-Length 標頭值(若已設置)必須與響應正文的大小匹配。
不使用 IHttpSendFileFeature。
根據 Expires 標頭與 max-age 和 s-maxage 緩存指令所指定,響應不能過時。
響應緩衝必須成功。 響應的大小必須小於配置的或默認的 SizeLimit。 響應的正文大小必須小於配置的或默認的 MaximumBodySize。
響應必須可根據 RFC 9111:HTTP 緩存進行緩存。 例如,no-store 指令不能出現在請求頭或響應頭字段中。 有關詳細信息,請參閱 RFC 9111:HTTP 緩存(第 3 節“在緩存中存儲響應”)。 -
配置
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddResponseCaching();
var app = builder.Build();
app.UseHttpsRedirection();
// UseCors must be called before UseResponseCaching
//app.UseCors();
app.UseResponseCaching();
3.特性
[HttpGet("info", Name = nameof(Info))]
[ResponseCache(Duration = 10, Location = ResponseCacheLocation.Any, NoStore = false)]
public ActionResult Info([FromHeader(Name = "access_token")] string token){
//TODO : SOMETHING
}
參考
https://learn.microsoft.com/zh-cn/aspnet/core/performance/caching/middleware?view=aspnetcore-7.0