- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在 asp.net core 2.0 中使用服务器端响应缓存(输出缓存),并发现了 Response Caching Middleware并想尝试一个全新的 asp.core mvc 项目。
这是上面链接中的描述,这让我认为这可以像输出缓存一样使用。
The middleware determines when responses are cacheable, stores responses, and serves responses from cache.
这是我的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>
缓存控制 header 似乎很好,这是我加载页面时在 header 中得到的内容,但时间戳在每秒每次刷新时不断更新。
Cache-Control:public,max-age=60
我从 MS 文档中了解到的是,响应缓存中间件是服务器端缓存机制,负责在 Response Caching 时缓存响应。似乎只是一个过滤器来操纵响应 header 进行缓存。
无法判断我的理解或代码是否有问题,我想提示自从我开始使用 ASP.Net Core 进行原型(prototype)设计以来,我经常有这种感觉。也许您还可以建议更好的资源作为副主题。
我之前看过这篇文章 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:Information: The response could not be cached for this request.
注意:我希望我可以创建#response-caching-middleware 标记。不确定#responsecache 是否相关。
最佳答案
我也遇到了同样的问题,我正要费尽心思,我设置了 app.UseResponseCaching();
以及 services.AddResponseCaching();
并添加ResponseCache
除了我的操作之外,尽管 cache-controll
与 Microsoft 官方文档中所说的完全一样从服务器返回的响应中正确设置了 header ,但服务器端仍然没有缓存任何内容。
经过几个小时的努力解决这个问题,我弄清楚了问题出在哪里以及为什么服务器上没有缓存。
浏览器默认设置cache-controll
值为 max-age=0
对于该请求(如果该请求不是由后退或前进引起的),即使您设置了 cache-controller
在您的回复中正确添加 ResponseCache
自 cache-controller
以来,您的操作(或 Controller )之上的属性通过请求发送设置为 max-age=0
,服务器无法缓存响应,我认为这也必须添加到响应缓存限制列表中
无论如何,您可以通过在调用app.UseResponseCaching();
之前添加几行代码来覆盖浏览器的默认行为。另一方面,您需要添加自定义中间件来修改请求 cache-control
调用之前的 header 值app.UseResponseCaching();
.
请参阅下面的代码,为我工作希望也为您工作
app.Use(async (ctx, next) =>
{
ctx.Request.GetTypedHeaders().CacheControl = new Microsoft.Net.Http.Headers.CacheControlHeaderValue()
{
Public = true,
MaxAge = TimeSpan.FromSeconds(60)
};
await next();
}
);
app.UseResponseCaching();
为了确保 ResponseCaching 按预期工作,您还可以使用 postman,但必须在设置中将“发送无缓存 header ”设置为关闭,请参见下图
关于ASP.Net Core 2.0 - ResponseCaching 中间件 - 不在服务器上缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48232911/
在 ASP.NET Core 应用程序中,我有一个返回一些数据的操作方法。我想在客户端缓存这些数据。所以基于documentation here我可以在操作方法上使用 ResponseCache 属性
我试图了解 .NET Core 3.1 中的响应缓存。但它没有如我所愿。我在 Chrome devtool 中查看了网络,它显示了带有 cache-control: no-cache, no-stor
我有一个 Controller 操作,它呈现一个部分 View ,该 View 从数据库异步获取一些数据。假设这些是菜单项。 [Route("SomeData")] [Respons
我正在为 android 中的 HttpUrlConnection 实现 ResponseCache。一切似乎都有效。我叫 ResponseCache.setDefault(new ResCache(
我在默认缓存 Location = ResponseCacheLocation.Any 的操作方法上有一个 [ResponseCache] 属性。但在少数情况下,我只想将此属性覆盖为 Response
这是我的 View 组件: public class Categories: ViewComponent { private readonly ICategoryService _catego
我想在 asp.net core 2.0 中使用服务器端响应缓存(输出缓存),并发现了 Response Caching Middleware并想尝试一个全新的 asp.core mvc 项目。 这是
我想在客户端浏览器中缓存主页 但是设置ResponseCache属性后,响应头设置为Cache-Control: no-cache, no-store 看完Response cache not wor
我想在客户端浏览器中缓存主页 但是设置ResponseCache属性后,响应头设置为Cache-Control: no-cache, no-store 看完Response cache not wor
我是一名优秀的程序员,十分优秀!