ASP.NETでは、ホスト名でキャッシュを出力することは可能ですか? IE VaryByHostまたはVarbyHostheader?

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

質問

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

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

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

今、私が行くなら .com, 、サイトは青でテーマになっています。に行くと .com.au サイト、それは赤でテーマになっています。

そして、ホスト名に基づいて、同じ検索結果のデータは異なります。 .com とオーストラリアの結果 .com.au.

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

私は、人が行く後に心配しています .com サイト、(正しく私たちの結果を返している)2人目が訪問している .com.au サイトと同じデータを検索すると、テーマと結果が得られます .com サイト。

キャッシュは可能ですか?

役に立ちましたか?

解決

はい、「カスタムによって異なる」ことができます。私は同じことを使用しています:

以下を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();
}

他のヒント

をチェックしてください VaryBycustom のパラメーター outputcache 指令。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top