IIS输出缓存 - 如何将资源添加到缓存,无论路径如何

时间:2013-09-12 14:14:04

标签: c# .net asp.net-mvc-4 caching iis

我在 IIS 7.5上运行多租户 .Net MVC4 应用程序

我希望IIS在其输出缓存中缓存,这是一个应该可以在每个租户,每个控制器下访问的公共资源。

例如:

  

/ MyTenant1 / myController的/ MyAction1 /帮助
  / MyTenant1 / myController的/ MyAction2 /帮助
  / MyTenant2 / myController的/ MyAction1 /帮助
  [...]

所有这些帮助完全相同。 我希望IIS将Help.aspx缓存为单个资源,并为任何租户,任何控制器,任何操作提供服务......

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

您可以为每个Action使用OutputCache属性

[OutputCache(Duration=600)]
public ActionResult MyAction1

或者您可以设置CacheProfile

[OutputCache(CacheProfile = "Cache1Hour")]
public ActionResult MyAction1 ...

并将其定义为WebConfig

<system.web>
    <caching>
      <outputCacheSettings>
          <outputCacheProfiles>
              <add name="Cache1Hour" duration="3600"/>
          </outputCacheProfiles>
      </outputCacheSettings>
    </caching>
</system.web>

此外,您可以定义缓存的位置:

  

您可以将Location属性设置为以下任何一个值:

     

·任何

     

·客户

     

·下游

     

·服务器

     

·无

     

·ServerAndClient

示例教程:

http://www.asp.net/mvc/tutorials/older-versions/controllers-and-routing/improving-performance-with-output-caching-cs

答案 1 :(得分:1)

我认为之前的答案不会得到理想的结果(抱歉因低分而无法评论)。 OP可以在这里不同意我,但只是我的想法......

缓存键由完整路径组成,在OP的情况下将包含:

/ MyTenant1 / myController的/ MyAction1 /帮助 / MyTenant2 / myController的/ MyAction1 /帮助

因此将是唯一的,从而以相同内容的多个副本结束。

您可以编写自定义缓存提供程序并提供密钥转换逻辑,以将这些不同的密钥映射到公共密钥(通过忽略租赁位?)。请参阅MSDN。这是一个解决方案。

其他,不那么优雅,解决方案(恕我直言)可能是制作单个页面(没有租赁)并使用服务器重写规则从其他租约映射到它。