Я хочу использовать кеширование ответов на стороне сервера (кеш вывода) с 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 - ничего не кэшируется
Также проверил это, но похоже, единственная разница в том, что я использую mvc. https://github.com/aspnet/ResponseCaching/blob/dev/samples/ResponseCachingSample/Startup.cs
Спасибо
Изменить: я вижу сообщение ниже в окне вывода, не могу найти ничего об этом в Google, кроме нескольких мест, которые я уже проверил для промежуточного программного обеспечения кеширования ответов.
Microsoft.AspNetCore.ResponseCaching.ResponseCachingMiddleware: Информация: не удалось кэшировать ответ для этого запроса.
Примечание. Я хотел бы создать тег # response-caching-middleware. Не уверен, что #responsecache актуален.