【问题标题】:OutputCache on server服务器上的输出缓存
【发布时间】:2012-10-04 14:51:37
【问题描述】:

我在我的控制器操作之上定义了 OutputCache 属性,以便服务器可以快速地为不同的用户提供相同的响应。但它会缓存整个页面。我的意思是如果我缓存了返回View() 的操作,母版页也会被缓存。因此,母版页顶部的用户帐户信息会被每个用户共享。我只想缓存内容页,而不是母版页_Layout.cshtml。我怎样才能排除它?

编辑: 我遇到问题的部分是:

@if(Request.IsAuthenticated) {
    <text>Hello <strong>@User.Identity.Name</strong>!</text>
    @: | 
    @Html.ActionLink("Index", "Index", "Account")
    @: |
    @Html.ActionLink("Logout", "Logout", "Account")
}
else
{
    @:|
   @Html.ActionLink("Login", "Login", "Account")
}

当我缓存一个控制器动作时,返回的视图也从缓存中携带了这个用户登录部分,因此它几乎向每个用户表示错误的敬意。即使页面被缓存,如何动态生成这部分?

【问题讨论】:

    标签: c# asp.net-mvc-3 caching outputcache


    【解决方案1】:

    VaryByCustom 是你想要的。

    把它放在你的 Global.asax 中:

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

    ...然后使用[OutputCache(VaryByCustom = "User")] 属性。

    这仍然会导致整个页面被单独缓存,但是会为每个用户创建一个单独的缓存。

    如果您正在寻找其他选项,请搜索 MVC 甜甜圈缓存或 MVC 甜甜圈孔缓存。

    回复评论

    听起来你想要甜甜圈洞缓存。看看this answer对你有没有帮助。

    【讨论】:

    • 谢谢,我需要动态生成登录部分,但要为任何用户缓存主要内容。
    猜你喜欢
    • 2013-05-22
    • 2011-07-17
    • 1970-01-01
    • 2011-06-28
    • 2018-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-13
    相关资源
    最近更新 更多