【问题标题】:Admin-only content for a cached page缓存页面的仅限管理员内容
【发布时间】:2014-10-05 06:14:18
【问题描述】:

我有一个 Asp.Net MVC 5 网站。在这个网站上,我有一个非常复杂的页面,并且需要进行大量查询来构建它。问题是,我想在此页面上为管理员用户添加一些控件(或隐藏一些元素)。我的第一个想法是添加一个 JavaScript 文件,该文件创建仅限管理员的内容,并通过甜甜圈缓存方法中的 <script> 标记添加它。但是,虽然每次都会调用 donut 缓存方法,但如果第一个访问该页面的用户是管理员,它会添加内容(因此,之后看到的所有用户都会看到控件,对于管理员用户,JavaScript 将呈现两次!

我可以为每个元素创建一个甜甜圈缓存方法,但它甚至打破了创建缓存的点。如果您要在每次有人访问该页面时创建所有元素,那么缓存该页面有什么意义?

【问题讨论】:

    标签: c# javascript asp.net asp.net-mvc caching


    【解决方案1】:

    您可以使用 OutputCache 的 VaryByCustom 属性来区分管理员和普通用户。

    GetVaryByCustomString global.asax 覆盖中,您可以检查HttpContext、当前Principal 等,以确定这一点。

    Source.

    这样您就可以为普通用户提供一个缓存,而为管理员提供一个不同的缓存。

    【讨论】:

    • 非常非常非常感谢。我很高兴我现在吓坏了!!顺便说一句,我使用此代码而不是作者的解决方案://inside GetVaryByCustomString if (arg == "IsAdmin") { return context.User.IsInRole("admin") ? "admin" : "other"; } return base.GetVaryByCustomString(context, arg);
    • 太棒了!很高兴帮助并感谢您提供有关您的解决方案的更多信息,它也可能对其他人有用。
    猜你喜欢
    • 2015-11-01
    • 1970-01-01
    • 2015-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多