我在 IIS 7.5上运行多租户 .Net MVC4 应用程序
我希望IIS在其输出缓存中缓存,这是一个应该可以在每个租户,每个控制器下访问的公共资源。
例如:
/ MyTenant1 / myController的/ MyAction1 /帮助
/ MyTenant1 / myController的/ MyAction2 /帮助
/ MyTenant2 / myController的/ MyAction1 /帮助
[...]
所有这些帮助完全相同。 我希望IIS将Help.aspx缓存为单个资源,并为任何租户,任何控制器,任何操作提供服务......
提前感谢您的帮助!
答案 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
示例教程:
答案 1 :(得分:1)
我认为之前的答案不会得到理想的结果(抱歉因低分而无法评论)。 OP可以在这里不同意我,但只是我的想法......
缓存键由完整路径组成,在OP的情况下将包含:
/ MyTenant1 / myController的/ MyAction1 /帮助 / MyTenant2 / myController的/ MyAction1 /帮助
因此将是唯一的,从而以相同内容的多个副本结束。
您可以编写自定义缓存提供程序并提供密钥转换逻辑,以将这些不同的密钥映射到公共密钥(通过忽略租赁位?)。请参阅MSDN。这是一个解决方案。
其他,不那么优雅,解决方案(恕我直言)可能是制作单个页面(没有租赁)并使用服务器重写规则从其他租约映射到它。