Как очистить кеш браузера при нажатии кнопки браузера в MVC4?
Я знаю, что это популярный вопрос в stackoverflow. Я прошел один и тот же вопрос, и я не могу найти правильный ответ для меня.
Это мой контроллер выхода. Результат действия
[Authorize]
public ActionResult LogOut(User filterContext)
{
Session.Clear();
Session.Abandon();
Session.RemoveAll();
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1));
Response.Cache.SetNoStore();
FormsAuthentication.SignOut();
return RedirectToAction("Home", true);
}
Это не сработало для меня.
Я также попытался добавить
<meta http-equiv="Cache-Control" content="no-cache" />
<meta http-equiv="Pragma" content="no-cache"/>
<meta http-equiv="Expires" content="0"/>
ни одна из этих проблем не разрешила мою проблему.
Ответы
Ответ 1
Проблема с вашим подходом заключается в том, что вы устанавливаете его там, где уже слишком поздно использовать MVC. Следующие три строки вашего кода должны быть помещены в метод, показывающий представление (следовательно, страницу), которое вы не хотите показывать.
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1));
Response.Cache.SetNoStore();
Если вы хотите применить поведение "no cache on browser back" на всех страницах, вы должны поместить его в global.asax.
protected void Application_BeginRequest()
{
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1));
Response.Cache.SetNoStore();
}
Ответ 2
Просто установите выходной кеш на действие. Я использовал этот подход во многих проектах:
[HttpGet, OutputCache(NoStore = true, Duration = 1)]
public ActionResult Welcome()
{
return View();
}
Вышеуказанный атрибут будет в основном указывать браузеру получать новую копию страницы из действия вашего контроллера, если пользователь переводит назад/вперед к вашему представлению.
Вы также можете определить свое кеширование в файле web.config и использовать его вместе с этим атрибутом, чтобы избежать повторения. См. здесь