マルチテナント アプリケーションの出力キャッシュ (ホスト名とカルチャによって異なります)

StackOverflow https://stackoverflow.com/questions/2012072

質問

私は持っています マルチテナントアプリケーション ASP.NET MVCで。提供されるアプリケーションのインスタンスは、 ホスト名 単独で(stackexchange のようなものだと思います)。

アプリケーションの各インスタンスには、 異なる文化 設定 (ブラウザの言語を読み取って使用するための「自動」でも)、 ローカライズされた それに応じて。

この状況で、何とかしたいのですが、 出力キャッシュ 私の行動のいくつかについて。そこで、私の質問は次のとおりです。

  1. とは何ですか 出力キャッシュを実現する可能性 マルチテナント ASP.NET MVC アプリケーションの場合、 出力はホスト名のみに依存します (つまり、ローカリゼーション要件を無視します)?

  2. (1)と同じですが、次のように考えます。 出力はカルチャ設定に依存します 同じように?

  3. (2)と同じですが、 出力はパラメータによって異なる場合があります アクションに渡されましたか?

この場合、すべてのサイトが 1 つの IIS Web サイトから実行されると考えています。

役に立ちましたか?

解決

私はこれを達成する方法を考え出したています。

単にVaryByHeaderに設定"host"プロパティを使用します。これを行うには多くの可能性があります。

方法1

OutputCacheAttributeを含むすべての必要な構成要素を、渡すVaryByHeaderを使用します:

public class HomeController : Controller
{  
    [OutputCache(Duration = 3600, VaryByParam = "none", VaryByHeader = "host")]
    public ActionResult Index() { /* ... */ }
}

方法2。

それとも、Web.configファイルのプロファイルに設定することができます:

<?xml version="1.0"?>
<configuration>
  <!-- ... -->
  <system.web>
    <!-- ... -->
    <caching>
      <outputCacheSettings>
        <outputCacheProfiles>
          <clear/>
          <add name="Multitenant" 
               enabled="true"
               duration="3600"
               varyByHeader="host"
               varyByParam="none"/>
        </outputCacheProfiles>
      </outputCacheSettings>
    </caching>
  </system.web>
</configuration>

そして、それを使用します:

public class HomeController : Controller
{  
    [OutputCache(CacheProfile = "Multitenant")]
    public ActionResult Index() { /* ... */ }
}

方法3。

それとも、OutputCacheAttributeをサブクラス化し、それを使用することができます:

public sealed class MultitenantOutputCacheAttribute : OutputCacheAttribute
{
    public MultitenantOutputCacheAttribute()
    {
        VaryByHeader = "host";
        VaryByParam = "none";
        Duration = 3600;
    }
}

そして、それを使用します:

public class HomeController : Controller
{  
    [MultitenantOutputCache]
    public ActionResult Index() { /* ... */ }
}

他のヒント

の場合、人々は、このページに着陸し、asp.net 2.xの等価を探しています属性は次のようになります。

[ResponseCache(Duration = 30, Location = ResponseCacheLocation.Any, VaryByHeader = "host", VaryByQueryKeys = new string[] { "*" })]

そして、あなたは追加のミドルウェアが必要になります。

:あなたはこのnugetパッケージと、このコードが必要です
public void ConfigureServices(IServiceCollection services)
{
    //stuff before...

    services.AddResponseCaching();
    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

    //stuff after...
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    //stuff before...

    app.UseResponseCaching();

    //stuff after...
}
ここでの 詳細A>

scroll top