【发布时间】:2023-01-04 03:06:26
【问题描述】:
我对 C# 属性 [ResponseCache] 的理解(我认为)它使用请求和请求标头作为键,然后将响应缓存在内存中。这对于图像、CSS 等静态内容显然是有意义的。这对于从不静态且总是变化的 API 请求显然没有意义。
这是 Microsoft 所说的 C# Web API 响应缓存的链接 https://learn.microsoft.com/en-us/aspnet/core/performance/caching/response?view=aspnetcore-6.0
从文档中我可以看到我可以通过以下方式禁用对缓存没有意义的内容的网络缓存:
[ResponseCache(NoStore = true, Location = ResponseCacheLocation.None)]
[HttpGet(api/GetRandomNumber/{seed}}
我看到您还可以通过以下示例将其显式添加到中间件以启用它:
app.UseResponseCaching();
app.Use(async (context, next) =>
{
context.Response.GetTypedHeaders().CacheControl =
new Microsoft.Net.Http.Headers.CacheControlHeaderValue()
{
Public = true,
MaxAge = TimeSpan.FromSeconds(10)
};
context.Response.Headers[Microsoft.Net.Http.Headers.HeaderNames.Vary] =
new string[] { "Accept-Encoding" };
await next();
});
我们的基准测试表明,在我们不知情(或任何启用它的代码)的情况下,似乎默认情况下启用了响应缓存。当我们将属性添加到经过身份验证的 API 调用时,内存使用率下降了一半。
[ResponseCache(NoStore = true, Location = ResponseCacheLocation.None)]
问题是。响应缓存在什么情况下默认开启?如果我们没有向任何东西添加 ResponseCache 属性,并且我们没有调用 app.UseResponseCaching() - 怎么可能启用响应缓存?
【问题讨论】:
标签: c# asp.net-core .net-core asp.net-core-webapi