ASP.NET Web窗体应用程序的静态文件浏览器缓存

时间:2016-09-26 21:06:58

标签: c# asp.net caching iis global-asax

我们希望对网站上某些文件夹(图片/样式/脚本)中的内容进行浏览器缓存,并将其设置为保持新鲜状态7天。此外,我们使用名为Ektron的CMS。

以下是我们使用的代码,以及为什么这不起作用的任何想法?

来自global.asax

void Application_PreSendRequestHeaders(object sender, EventArgs e)
{
    System.Web.HttpCacheability cachelevel = System.Web.HttpCacheability.Private;

    if (Request.FilePath.ToLower().StartsWith("/images") || Request.FilePath.ToLower().StartsWith("/styles") || 
        Request.FilePath.ToLower().StartsWith("/js") || Request.FilePath.ToLower().StartsWith("/scripts"))
    {
        cachelevel = System.Web.HttpCacheability.Public;

        if (cachelevel == System.Web.HttpCacheability.Public) Response.Cache.SetCacheability(cachelevel);

        var staticExtensions = new List<string> { ".js", ".css", ".jpg", ".gif", ".png" };

        if (staticExtensions.Any(ext => Request.FilePath.ToLower().EndsWith(ext)))
        {
            Response.Cache.SetMaxAge(TimeSpan.FromDays(7));
        }
    }

1 个答案:

答案 0 :(得分:0)

不要认为Application_PreSendRequestHeaders不会为每个静态内容触发。 而是使用Web.config system.webServer-staticContent-clientCache设置,如下所示:

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

这将设置为7天