Подтвердить что ты не робот

Как очистить кеш браузера при нажатии кнопки браузера в 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"/>

ни одна из этих проблем не разрешила мою проблему.

4b9b3361

Ответ 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 и использовать его вместе с этим атрибутом, чтобы избежать повторения. См. здесь