如何使用页面 OutputCache 和 VaryByCustom 来考虑 ASP.NET 2.0 中的多个条件?

发布于 2024-11-09 13:41:48 字数 453 浏览 0 评论 0原文

我们有一个多语言网站,并且在用户登录后具有一些个性化(例如,标题显示不同的链接、用户的用户名等),但我们希望缓存特定的面向公众的页面,这些页面是之前页面的版本用户登录(例如,对于只是浏览网站的人)。

在 ASP.NET 2.0 站点中使用 VaryByCustom 时,有没有办法考虑以下多个条件(是的,我们最终会升级,但不是现在),以及如何连接页面以将多个条件传递到该方法中?

  1. 自定义 ASP.NET 会员配置文件 属性称为 配置文件.首选项.语言(我们 将检查 URL 方案并设置 将 Language 属性设置为有效 VaryByCustom 之前的值)。
  2. 用户的浏览器
  3. 任何查询字符串/参数

这三种情况将允许我们缓存经常访问的公共页面,并且不必计算事物/访问数据库或其他缓存来获取菜单项的源等不经常更改的页面。

任何帮助将不胜感激。

谢谢你,

We have a site that is multi-lingual and has some personalization after the user's login (e.g. headers show different links, the user's username, etc.), but we would like to cache particular public facing pages that are the versions of the page before the user logs in (e.g. for people just browsing the site).

Is there a way to take the following multiple criteria into account when using VaryByCustom in an ASP.NET 2.0 site (yes, we will eventually upgrade, but not now) and how would you hook a page up to pass multiple criteria into the method?

  1. A custom ASP.NET membership profile
    property called
    Profile.Preferences.Language (we
    will inspect the URL scheme and set
    the Language property to a valid
    value before VaryByCustom).
  2. The user's browser
  3. Any querystrings/params

Those three cases would allow us to cache our frequently hit public pages and keep from having to compute things/hit the DB or other caches to get the source of menu items, etc. for pages that infrequently change.

Any help would be greatly appreciated.

Thank you,

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

剩一世无双 2024-11-16 13:41:48

对于第 2 和第 3 个,您可以使用以下内容

<%@ OutputCache Duration="Whatever you want in seconds" VaryByParam="*" VaryByCustom="browser"%>

抱歉,我无法为您提供第 1 个帮助

For number 2 and 3 you can use the following

<%@ OutputCache Duration="Whatever you want in seconds" VaryByParam="*" VaryByCustom="browser"%>

Sorry I can't help you for the 1st one

蘸点软妹酱 2024-11-16 13:41:48

我建议重写 Global.asax 中的 GetVaryByCustomString 方法,以根据上述三个条件创建您自己的缓存键。

public override string GetVaryByCustomString(HttpContext context, string arg)
{
    const string KEY = "UserSpecific";
    if (arg == KEY) {
         //perform some logic to generate a unique key per querystring, brower and profile
         string cacheKey = context.Request.QueryString["someparam"] + ...
         return cacheKey;
     }

    return base.GetVaryByCustomString(context, arg);
}

并修改outputcache指令以利用这个新的cachekey生成逻辑。

<%@ OutputCache Duration="300" VaryByParam="none" VaryByCustom="UserSpecific" %>

I would suggest overriding the GetVaryByCustomString method in the Global.asax to create your own cachekey based on the above three criteria.

public override string GetVaryByCustomString(HttpContext context, string arg)
{
    const string KEY = "UserSpecific";
    if (arg == KEY) {
         //perform some logic to generate a unique key per querystring, brower and profile
         string cacheKey = context.Request.QueryString["someparam"] + ...
         return cacheKey;
     }

    return base.GetVaryByCustomString(context, arg);
}

And modifying the outputcache directive to utilize this new cachekey generation logic.

<%@ OutputCache Duration="300" VaryByParam="none" VaryByCustom="UserSpecific" %>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文