如何使用ASP.NET Core 中的响应缓存中间件

发布时间 2023-08-31 17:13:30作者: 喜爱糖葫芦

提问

ASP.NET Core 中的响应缓存中间件

回答

  1. 缓存条件
    请求必须生成带有 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 节“在缓存中存储响应”)。

  2. 配置

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