【问题标题】:Asp.Net caching specific querystring parameters, not othersAsp.Net 缓存特定的查询字符串参数,而不是其他
【发布时间】:2013-02-22 02:38:54
【问题描述】:

我不知道如何在下面发布的不同 URL 格式下缓存此页面。

我想缓存这些页面:

/folder/
/folder/?page=2
/folder/?id=17
/folder/?id=17&page=2

我根本不希望缓存具有查询字符串参数“搜索”的页面。

/folder/?search=1&param1=1&param2=2

我查看了一些 OutputCache 的 VaryByCustom 参数,但我不知道如何阻止底部 URL 被缓存。

编辑 - 示例页面

<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="cache.aspx.vb" Inherits="cache" %>
<%@ OutputCache Duration="3600" VaryByParam="page;id" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<body>

    <%=date.now %>

</body>
</html>

【问题讨论】:

    标签: asp.net caching outputcache


    【解决方案1】:

    您只需要指定要缓存的查询字符串参数。尝试使用 VaryByParam 属性并将其设置为以分号分隔的字符串列表;在您的情况下,请尝试以下操作。

    VaryByParam = "page,param1,param2"

    【讨论】:

    • VaryByParam="page;id" 适用于所有页面,但是 /folder/?search=1&param1=1 被缓存并引用 /folder/ 页面请求的输出。
    • 你必须更具体。 /folder/ 不是页面,而是文件夹。
    • 默认情况下,它要求 /folder/Default.aspx 更具体。您是将此指令放在页面上还是在某些控件中?你能粘贴你有什么吗?
    • 我添加了一个示例页面,其中没有任何内容,只有一个 OutputCache 声明和一个时间戳。如果你复制页面,你会注意到搜索查询字符串也被缓存了。
    • 您不能“缓存页面”,但如果重复搜索查询字符串参数,则让它提供非缓存版本。这个 AFAIK 没有逻辑。我的建议是将页面的不同部分封装到 .ascx 控件中,并将输出缓存逻辑应用于每个控件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    • 2011-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多