#.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;
}
});
}