【发布时间】:2018-03-11 14:09:21
【问题描述】:
我在 Visual Studio 中从 WebApi .Net Core 2.0 模板创建了一个新的解决方案。 我在启动时添加了以下内容。
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddHttpCacheHeaders(opt => opt.MaxAge = 600);
services.AddResponseCaching();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseResponseCaching();
app.UseHttpCacheHeaders();
app.UseMvc();
}
然后,使用邮递员,我点击http://localhost:xxxx/api/values,它是由模板创建的端点并返回["value1","value2"]
请注意,我确保 Postman 不发送 no-cache 标头(在 Postman 设置中)。
HttCacheHeaders 服务来自 repo。它添加了 HTTP 缓存标头。所以我的端点响应头是:
- 缓存控制:public,max-age=600
- 内容类型:应用程序/json; charset=utf-8
- 日期:格林威治标准时间 2017 年 9 月 29 日星期五 14:02:29
- ETag:C5DFA8974BB722D27E71EE50D3D14625
- 到期:格林威治标准时间 2017 年 9 月 29 日星期五 14:03:29
- 最后修改时间:格林威治标准时间 2017 年 9 月 29 日星期五 14:02:29
- 服务器:红隼
- 传输编码:分块
- 变化:接受、接受语言、接受编码
- X-Powered-By:ASP.NET
- X-SourceFiles: =?UTF-8?B?................
问题是没有缓存。 Ouput 窗口只显示 The response could not be cached for this request.
所以我对如何使用ASP.NET Core ResponseCaching Middleware 有点迷茫。
更新
如果我不使用HttCacheHeaders 服务,而是将[ResponseCache(Duration = 600)] 添加到我的控制器的操作中,缓存就会起作用。
请注意,我想使用 HttCacheHeaders 的原因是为了让 ETag 和 Last-Modified 稍后进行验证缓存和过期缓存。
【问题讨论】:
标签: asp.net caching http-caching asp.net-core-2.0