2

我有一个简单的站点,我想为其启用输出缓存,但它使用 ASP.NET 网页(http://asp.net/web-pages,而不是 Web 窗体或 MVC)。有什么指导吗?

4

2 回答 2

4

您可以将其放在要缓存在服务器上的任何页面的顶部:

Response.Cache.SetCacheability(HttpCacheability.Server);
Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));
Response.Cache.SetValidUntilExpires(true);
Response.Cache.VaryByParams.IgnoreParams = true;

其中,如果要缓存文件夹中的所有页面,请将代码放在 _PageStart 文件中。

有关 MSDN 的更多信息:http: //msdn.microsoft.com/en-us/library/system.web.httpresponse.cache.aspx

于 2013-09-28T21:26:18.183 回答
2

以下代码可以满足您的所有需求,并具有几个重载来微调给定页面的输出缓存:

@{
    var seconds = 600; //10min
    Response.OutputCache(seconds);
}

在幕后,这是一个包含在 System.Web.WebPages.dll 程序集中的扩展方法,它执行此操作:

internal static void OutputCache(HttpContextBase httpContext, HttpCachePolicyBase cache, int numberOfSeconds, bool sliding, IEnumerable<string> varyByParams, IEnumerable<string> varyByHeaders, IEnumerable<string> varyByContentEncodings, HttpCacheability cacheability)
{
  cache.SetCacheability(cacheability);
  cache.SetExpires(httpContext.Timestamp.AddSeconds((double) numberOfSeconds));
  cache.SetMaxAge(new TimeSpan(0, 0, numberOfSeconds));
  cache.SetValidUntilExpires(true);
  cache.SetLastModified(httpContext.Timestamp);
  cache.SetSlidingExpiration(sliding);
  if (varyByParams != null)
  {
    foreach (string index in varyByParams)
      cache.VaryByParams[index] = true;
  }
  if (varyByHeaders != null)
  {
    foreach (string index in varyByHeaders)
      cache.VaryByHeaders[index] = true;
  }
  if (varyByContentEncodings == null)
    return;
  foreach (string index in varyByContentEncodings)
    cache.VaryByContentEncodings[index] = true;
}
于 2014-04-27T04:54:05.633 回答