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

C# IIS输出缓存-如何将资源添加到缓存,无论路径如何,c#,.net,asp.net-mvc-4,caching,iis,C#,.net,Asp.net Mvc 4,Caching,Iis,我有一个运行在IIS 7.5上的多租户.NetMVC4应用程序 我希望IIS缓存在它的输出缓存中,这是一个公共资源,每个租户、每个控制器都应该可以访问它 例如: /MyTenant1/MyController/MyAction1/Help /MyTenant1/MyController/MyAction2/Help /MyTenant2/MyController/MyAction1/Help [……] 所有这些帮助都完全一样。 我希望IIS将Help.aspx缓存为单个资源,并为任何租户、任何控

我有一个运行在IIS 7.5上的多租户.NetMVC4应用程序

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

例如:

/MyTenant1/MyController/MyAction1/Help
/MyTenant1/MyController/MyAction2/Help
/MyTenant2/MyController/MyAction1/Help
[……]

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


提前感谢您的帮助

对于每个操作,都可以使用OutputCache属性

[OutputCache(Duration=600)]
public ActionResult MyAction1
或者您可以设置缓存配置文件

[OutputCache(CacheProfile = "Cache1Hour")]
public ActionResult MyAction1 ...
并将其定义为网络配置

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


我认为前面的答案不会得到期望的结果(抱歉,由于分数低,无法评论)。OP可能不同意我的观点,但只是我的想法

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

/MyTenant1/MyController/MyAction1/Help /MyTenant2/MyController/MyAction1/Help

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

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


另一个不那么优雅的解决方案(IMHO)可能是创建一个页面(无租约),并使用服务器重写规则从其他租约映射到该页面

此租户是否位于同一IIS网站/应用程序下,或者每个租户都有自己的网站/应用程序?感谢您提供这些提示。然而,在我的例子中,这些解决方案让IIS保留与控制器、操作和租户一样多的“/Help”缓存版本。默认情况下,IIS会根据请求的路径更改缓存。因此,我如何告诉IIS为两个不同的路径保留相同版本的“/Help”/MyTenant1/MyController/MyAction1/Help/MyTenant2/MyController/MyAction1/Help@JaffarMoore好啊现在我们有了i.net提供的解决方案:)是的!我想你是对的@I.net-让我检查一下,然后再给你回复。事实上,它可以与自定义的OutCacheProvider一起工作。以下是一个实现,它启发我最终缓存了我的公共“/Help”页面,而不管租户路径是什么:。这里有一篇Scott Gu的文章,感谢您的帮助。