这里现在有一个帮助文档,其中包含一个示例,解释了如何从缓存中检索输出或根据请求中存在的标头生成输出。
https://docs.microsoft.com/en-us/dotnet/api/system.web.httpcachepolicy.varybycontentencodings?view=netframework-4.8
也可以像这样作为属性添加到方法中:
[OutputCache(Duration = 3600,
Location = OutputCacheLocation.Server,
VaryByParam = "id;page",
VaryByContentEncoding = "gzip, deflate, br, compress"
)]
[HttpGet]
public virtual async Task<ActionResult> Post(int id)
{
...
}
注意:我有VaryByContentEncoding = "gzip, deflate, br, compress"
这是在 .Net 4.6 中
尽管有文档,但使用分号分隔的列表似乎无法按预期工作,至少对于属性而言。我没有尝试过标记。
通过上述设置,我可以发送带有以下“Accept-Encoding”标头值的请求,并至少从 IIS Express 返回带有“Content-Encoding: gzip”的缓存响应。
- 接受编码:gzip
- 接受编码:gzip、放气
- 接受编码:gzip、deflate、br
- 接受编码:deflate、br、gzip
如果 属性 中的设置使用分号分隔列表,则从不缓存响应。这不似乎工作:
[OutputCache(Duration = 3600,
Location = OutputCacheLocation.Server,
VaryByParam = "id;page",
VaryByContentEncoding = "gzip;deflate;br;compress"
)]
发送不受支持的接受编码将按预期返回未压缩但仍缓存的响应。
注意:如果分号按预期分隔,则 VaryByParam 值确实有效。