2

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

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

例如:

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

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

在此先感谢您的帮助 !

4

2 回答 2

1

您可以为每个动作使用 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 属性设置为以下任一值:

· 任何

· 客户

· 下游

· 服务器

· 没有任何

· 服务器和客户端

示例教程:

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

于 2013-09-12T14:22:11.537 回答
1

我认为之前的答案不会得到想要的结果(抱歉,由于分数低无法发表评论)。OP在这里可以不同意我的观点,但只是我的想法......

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

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

因此将是独一无二的,从而最终形成相同内容的多个副本。

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

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

于 2013-09-12T14:49:52.813 回答