我想在 asp.net core 2.0 中使用服务器端响应缓存(输出缓存),发现了响应缓存中间件,并想尝试一个全新的 asp.core mvc 项目。
这是上面链接中的描述,这让我认为这可以像输出缓存一样使用。
中间件确定响应何时可缓存、存储响应并提供来自缓存的响应。
这是我的 startup.cs 的样子。
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddResponseCaching();
services.AddMvc();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseResponseCaching();
if (env.IsDevelopment())
{
app.UseBrowserLink();
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
}
这是 HomeController.cs
[ResponseCache(Duration = 60)]
public class HomeController : Controller
{
public IActionResult Index()
{
return View();
}
public IActionResult About()
{
ViewData["Message"] = "Your application description page.";
return View();
}
public IActionResult Contact()
{
ViewData["Message"] = "Your contact page.";
return View();
}
public IActionResult Error()
{
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
}
}
_Layout.cshtml 文件的底部还有一个时间戳,所以我可以知道页面何时呈现,如下所示。
<p>© 2018 - ResponseCachingMiddleware - @DateTime.UtcNow</p>
Cache-Control 标头似乎很好,这是我在加载页面时在标头中得到的,但时间戳会在每秒每次刷新时不断更新。
Cache-Control:public,max-age=60
我从 MS 文档中了解到的是响应缓存中间件是服务器端缓存机制,负责缓存响应,而响应缓存似乎只是一个过滤器来操作缓存的响应标头。
无法判断我的理解或代码是否有问题,我想抱怨自从我开始使用 ASP.Net Core 进行原型设计以来,我经常有这种感觉。也许您还可以建议更好的资源作为附带主题。
我在 ASP.NET Core 2.0 之前查看过这篇文章 - Http Response Caching Middleware - Nothing cached
也检查了这一点,但似乎唯一的区别是我使用的是 mvc。 https://github.com/aspnet/ResponseCaching/blob/dev/samples/ResponseCachingSample/Startup.cs
谢谢
编辑:我在输出窗口中看到下面的消息,除了我已经检查过响应缓存中间件的几个地方之外,在谷歌上找不到任何关于它的信息。
Microsoft.AspNetCore.ResponseCaching.ResponseCachingMiddleware:信息:无法缓存此请求的响应。
注意:我希望我可以创建#response-caching-middleware 标签。不确定#responsecache 是否相关。