Управление кэшем не работает в asp.net приложение core 2.0

#.net #iis #asp.net-core #browser-cache #cache-control

#.net #iis #asp.net-core #браузер-кэш #управление кэшем

Вопрос:

Я разместил веб-сайт через IIS 10 и добавил в раздел ниже конфигурационный файл для кэша для статического содержимого.

 <configuration>
  <system.webServer>
    <staticContent>
  <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="7.00:00:00" cacheControlCustom="public" />
  </staticContent>...
  

а ниже приведен раздел файла startup.cs

 public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    var options = new RewriteOptions()
   .AddRedirect("rent/(.*)", "/$1")
   .AddRedirect("explore/(.*)", "/$1"); 
    app.UseRewriter(options);
    app.UseMyMiddleware();

    loggerFactory.AddConsole(Configuration.GetSection("Logging"));
    loggerFactory.AddDebug();

    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
        app.UseBrowserLink();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
    }
    app.UseStaticFiles();
    app.UseStaticFiles(new StaticFileOptions
    {
        OnPrepareResponse = ctx =>
        {
            const int durationInSeconds = 60 * 60 * 7;
            ctx.Context.Response.Headers[HeaderNames.CacheControl] =
                "public,max-age="   durationInSeconds;
        }
    });
}
  

Однако он не добавляет cache-control в заголовок ответа для любого статического ресурса, такого как изображения, файлы js, css.

Кто-нибудь может мне помочь? Если потребуется какая-то конкретная информация, пожалуйста, дайте мне знать, я обновлю ее в соответствии с вопросом.

Комментарии:

1. нашел проблему сам. Я использовал app.UseStaticFiles();, пустой.

2. Пожалуйста, отправьте это в качестве ответа, чтобы этот вопрос вышел из очереди неотвеченных.

3. хорошо @ChrisPratt

Ответ №1:

Я дважды вызывал UseStaticFiles функцию. Комментарий по умолчанию устранил проблему.

 public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    var options = new RewriteOptions()
   .AddRedirect("rent/(.*)", "/$1")
   .AddRedirect("explore/(.*)", "/$1"); 
    app.UseRewriter(options);
    app.UseMyMiddleware();

    loggerFactory.AddConsole(Configuration.GetSection("Logging"));
    loggerFactory.AddDebug();

    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
        app.UseBrowserLink();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
    }
    //app.UseStaticFiles(); // commenting this fixed the issue.
    app.UseStaticFiles(new StaticFileOptions
    {
        OnPrepareResponse = ctx =>
        {
            const int durationInSeconds = 60 * 60 * 7;
            ctx.Context.Response.Headers[HeaderNames.CacheControl] =
                "public,max-age="   durationInSeconds;
        }
    });
}