ASP.NETでは、ホスト名でキャッシュを出力することは可能ですか? IE VaryByHostまたはVarbyHostheader?
-
25-09-2019 - |
質問
ホストヘッダーが多数あるWebサイトがあります。テーマとデータはホストヘッダーに依存し、さまざまなホストが異なる見た目のサイトをロードします。
それでは、検索結果を返す「Foo」というWebサイトがあると想像してみましょう。同じコードが以下にリストされている両方のサイトを実行します。そうです 同じサーバーとウェブサイト (ホストヘッダーを使用)
www.foo.com
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