输出缓存不适用于 AJAX varyByParam

本文关键字:AJAX varyByParam 适用于 不适用 缓存 输出 | 更新日期: 2023-09-27 18:33:30

>我有一个 WCF Web 服务的终结点,该服务在性能监视器中没有为 AJAX 请求获取输出缓存命中,但它确实为对终结点的非 AJAX 请求获取输出缓存。

网页配置:

<caching>
  <outputCacheSettings >
    <outputCacheProfiles>
      <add location="Any" name="myCache" duration="3600" varyByParam="*" />
     </outputCacheProfiles>
  </outputCacheSettings>
</caching>

配置中缺少选项吗?我没有包括Javascript,因为我怀疑问题出在那里,因为服务器不应该检查任何标头来确定缓存价值。

端点:

[AspNetCacheProfileAttribute("myCache")]
        [WebGet(ResponseFormat= WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = "suburb?name={name}&state={state}&category={category}&bedrooms={bedrooms}&country={country}")]

输出缓存不适用于 AJAX varyByParam

当你进行 ajax 调用时,有可能你正在将其作为 cache: false 传递。

当你像这样调用时,ajax 调用将传递带有额外参数的 URL,值将是一个随机的唯一数字。由于 asp.net 方法接收此额外参数,并且您使用varyByParam="*"配置输出缓存,因此此方法永远不会缓存。解决方案是

  1. 设置缓存:在 ajax 调用中为 true -(调用动态方法时不好)或
  2. 设置输出缓存 varyByParam="none"(仅当您的方法需要缓存而不考虑参数时才使用)或
  3. 设置输出缓存 varyByParam="parameter1;parameter2"(如果你有多个参数,这是理想的解决方案)。对于单个参数使用varyByParam="parameter1"

抱歉回复晚了。我刚才看到了这个问题。