如何清除浏览器后面的浏览器缓存按钮单击MVC4?

时间:2013-05-02 11:40:06

标签: c# asp.net-mvc asp.net-mvc-4 browser-cache

我知道这是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"/>

这些都没有解决我的问题。

2 个答案:

答案 0 :(得分:49)

您的方法存在的问题是,您将其设置为MVC应用它已经太晚了。应将以下三行代码放在显示您不想显示的视图(因此是页面)的方法中。

Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1));
Response.Cache.SetNoStore();

如果要在所有页面上应用“浏览器无缓存”行为,则应将其放在global.asax中。

protected void Application_BeginRequest()
{
    Response.Cache.SetCacheability(HttpCacheability.NoCache);
    Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1));
    Response.Cache.SetNoStore();
}

答案 1 :(得分:13)

只需在操作上设置输出缓存即可。我在很多项目中都使用过这种方法:

[HttpGet, OutputCache(NoStore = true, Duration = 1)]
public ActionResult Welcome()
{
    return View();
}

如果用户向后/向前导航到您的视图,上述属性将基本上指示浏览器从您的控制器操作获取页面的新副本。

您还可以在web.config中定义缓存,并与此属性结合使用以避免重复。见here