我尝试在asp.net核心项目中实现响应缓存,但是它不起作用。这是startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddResponseCaching();
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseResponseCaching();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
这是我的控制器。
[ResponseCache(Duration = 30)]
public IActionResult Index()
{
ViewBag.IsMobile = RequestExtensions.IsMobileBrowser(ContextAccessor.HttpContext.Request);
return View();
}
但仍然缓存控件标头ID
cache-control →no-cache, no-store
我缺少的地方请帮忙。此响应缓存不起作用,我接受了Microsoft文档的指导
答案 0 :(得分:0)
我尝试了this Microsoft document并成功缓存了。
Cache-Control: public,max-age=30
Date: Thu, 27 Dec 2018 07:50:16 GMT
我认为您缺少app.Use(async => )
部分。
答案 1 :(得分:0)
要在dotnet core中设置响应缓存,请按照以下步骤操作:
在Startup.cs中找到ConfigureServices
方法并添加以下行:
services.AddResponseCaching();
Ins Startup.cs找到Configure
方法并添加以下行:
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();
});
将[ResponseCache]
属性应用于需要缓存的操作:
[ResponseCache(Duration = 300, VaryByQueryKeys = new string[] { "id" })]
[HttpGet]
public async Task<IActionResult> Index(int id)
{
return View();
}
答案 2 :(得分:0)
请注意,要使缓存正常工作,必须满足许多要求:
该请求必须引起服务器200(OK)响应。
请求方法必须为GET或HEAD。
终端中间件(例如静态文件中间件)不得处理 在响应缓存中间件之前进行响应。
不得显示Authorization标头。
Cache-Control标头参数必须有效,并且响应必须 标记为公开,而不标记为私有。
Pragma:没有缓存的标头/值必须不存在 Cache-Control标头不存在,因为Cache-Control标头 覆盖Pragma标头(如果存在)。 Set-Cookie标头必须 不存在。
各种标头参数必须有效且不等于*。
Content-Length标头值(如果已设置)必须与 响应主体。
...
访问此网站:aspnet-core-response-cache
还要注意,如果邮递员发出请求,请禁用“不发送缓存头”选项。
请参阅此帖子(结束帖子的图片):ASP.Net Core 2.0 - ResponseCaching Middleware - Not Caching on Server