3

当第一个用户登录并打开他的个人资料并注销时,我有一个 Web 应用程序。
当第二个用户在注销第一个用户后登录同一台计算机并打开配置文件时,它显示第一个用户配置文件。第二个用户必须刷新页面。
如何防止这种情况,我用过

 [OutputCache(NoStore = true, Duration = 60, VaryByParam = "*")]
 public ActionResult profile()
 {
    usertb user = db.usertbs.SingleOrDefault(a => a.EMail == userid);
    return View(user );
 }


请帮我解决它

4

2 回答 2

4

如果您从操作方法中删除该OutputCache属性,它会起作用吗?

//[OutputCache(NoStore = true, Duration = 60, VaryByParam = "*")]
public ActionResult profile()
{
   usertb user = db.usertbs.SingleOrDefault(a => a.EMail == userid);
   return View(user );
}

如果是这样,您应该能够通过 2 个步骤解决此问题。首先,把它放在你的 Global.asax 文件中:

public override string GetVaryByCustomString(HttpContext context, string custom)
{
    return "User".Equals(custom, StringComparison.OrdinalIgnoreCase)
        ? User.Identity.Name
        : base.GetVaryByCustomString(context, custom);
}

之后,您可以OutputCache在操作中使用以下属性:

[OutputCache(NoStore = true, Duration = 60, VaryByCustom = "User")]
public ActionResult profile()
{
   usertb user = db.usertbs.SingleOrDefault(a => a.EMail == userid);
   return View(user );
}
于 2013-03-24T13:51:20.443 回答
0

您只需将 OutputCache 的位置设置为 Client,这将在浏览器上缓存个性化数据,每个用户都将获得自己的缓存。

[OutputCache(NoStore = true, Duration = 60, VaryByParam = "*", Location=OutputCacheLocation.Client)]
public ActionResult profile()
{
    usertb user = db.usertbs.SingleOrDefault(a => a.EMail == userid);
    return View(user );
}

请参阅: 使用输出缓存提高性能 (C#)

于 2016-12-08T07:52:24.023 回答