Предотвращение кэширования возвращаемого представления при возникновении ошибки - PullRequest
2 голосов
/ 15 сентября 2010

Есть ли способ предотвратить кэширование страницы, когда для действия был установлен атрибут OutputCache?

Это так, чтобы при последующем обращении к странице она не сохраняла общийСтраница ошибки, которая была возвращена ранее.

В приведенном ниже примере показан случай, когда приложению было бы желательно не кэшировать страницу, когда оно по какой-либо причине вызывает исключение (тайм-аут дБ и т. д.).

[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);

Это взято из другого вопроса .

Ответы [ 2 ]

2 голосов
/ 15 сентября 2010

Самый простой способ - не возвращать представление об ошибке из этого метода действия, а вместо этого перенаправлять на действие Ошибка при возникновении ошибки.

catch
{
  return RedirectToAction("Error");
}

Если вы не можете сделать это, можно написатьФильтр действий, который корректирует значения response.cache.

1 голос
/ 15 сентября 2010

В конце мне просто нужно было добавить следующее к представлению ошибки:

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

Это устанавливает кэширование страницы только на 30 секунд.

Simples!

...