如何使用ASP.NET Core 中的响应缓存中间件
提问
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