发生错误时阻止返回的视图被缓存

时间:2010-09-15 09:28:42

标签: asp.net-mvc outputcache

有没有办法在动作上设置OutputCache属性时阻止页面被缓存?

这样,当随后点击页面时,它不会存储先前返回的通用错误页面。

下面的示例显示了一个实例,当应用程序因任何原因(db timeout等)导致异常时,应该不要缓存页面。

[OutputCache(CacheProfile = "Homepage")]
public ActionResult Index()
{
  var model = new HomepageModel();

  try
  {
    model = Db.GetHomepage();
  }
  catch
  {
    //Do not want to cache this!
    return View("Error");
  }

  //Want to cache this!
  return View();
}

更新 最后,我只需要添加以下内容:

filterContext.HttpContext.Response.RemoveOutputCacheItem(filterContext.HttpContext.Request.Url.PathAndQuery);

这取自another question

2 个答案:

答案 0 :(得分:2)

最简单的方法不是从此操作方法返回错误视图,而是在发生错误时重定向到错误操作。

catch
{
  return RedirectToAction("Error");
}

如果你不能这样做,可以编写一个调整response.cache值的动作过滤器。

答案 1 :(得分:1)

最后,我只需要将以下内容添加到错误视图中:

<%@ OutputCache NoStore="true" Duration="30" VaryByParam="*" %>

这将页面设置为仅缓存30秒。

Simples!