7

多数のホスト ヘッダーを持つ Web サイトがあります。テーマとデータはホスト ヘッダーに依存し、異なるホストは異なる外観のサイトをロードします。

では、検索結果を返す「Foo」という Web サイトがあるとします。同じコードが、以下にリストされている両方のサイトを実行します。同じサーバーと Web サイトです(ホスト ヘッダーを使用)

  1. www.foo.com
  2. www.foo.com.au

にアクセスする.comと、サイトのテーマは青になっています。サイトにアクセスすると、.com.auテーマは赤です。

また、ホスト名に基づいて、同じ検索結果のデータが異なります: の米国の結果.comとオーストラリアの結果.com.au

を使用したい場合OutputCaching、これを処理してホスト名で分割できますか?

.comある人がサイトにアクセスした後 (米国の結果が正しく返される)、別の人がその.com.auサイトにアクセスして同じデータを検索すると、そのサイトのテーマと結果が得られるのではないかと懸念してい.comます。

キャッシングは可能ですか?

4

2 に答える 2

13

はい、「カスタムで変える」ことができます。私は同じものを使用しています:

以下を Global.asax.cs に配置します。

public override string GetVaryByCustomString(HttpContext context, string custom)
{
    if (custom == "Host")
    {
        return context.Request.Url.Host;
    }
    return String.Empty;
}

次に、コントローラーで:

[OutputCache(VaryByParam = "None", VaryByCustom="Host", Duration = 14400)]
public ActionResult Index()
{
    return View();
}
于 2011-01-31T12:32:37.390 に答える
5

OutputCacheディレクティブのVaryByCustomパラメータを確認してください。

VaryByCustom が呼び出されたときの動作を定義するには、メソッド GetVaryByCustomString をオーバーライドする必要があります。

public override string GetVaryByCustomString(HttpContext context, string custom)
{
    if(custom == "Your_Custom_Value")
    {
        // Do some validation.
        // Return a string for say, .com, or .com.au

    }
    return String.Empty;
}

重要なのは、キャッシュする各インスタンスの文字列値を返すことです。あなたの場合、オーバーライドされたメソッドは、URL から「.com」または「.com.au」の部分を取り除いて返す必要があります。異なる値ごとに、異なるキャッシュが生成されます。

HTH

于 2010-05-11T08:00:07.563 に答える