ホストに応じて特定のページをキャッシュする機能を実装しようとしています。これは、同じパラメーターを持つ複数のバージョンのページを作成でき、リクエストに関する唯一の違いは、リクエストされているホストであるためです。
したがって、たとえば、これら2つのURLは同じページを要求しますが、スタイルは異なります。
http://www.a.com/something/specific
と
http://www.b.com/something/specific
ここで概説した例を見ていきます。
http://msdn.microsoft.com/en-us/library/5ecf4420%28v=VS.90%29.aspx
しかし、それは私には意味がありません。
これをglobal.asaxに追加しました:
public override string GetVaryByCustomString(HttpContext context, string arg)
{
if (arg == "host")
{
return "host=" + context.Request.Url.Host;
}
return base.GetVaryByCustomString(context, arg);
}
この例では、「プログラムでカスタム文字列を設定するには、SetVaryByCustomメソッドを呼び出して、使用するカスタム文字列を渡します」と、次のようなコードで示しています。
Response.Cache.SetVaryByCustom("host");
問題は、これをどうしたらよいかわからないことです。前の行を追加したのMvcApplication_EndRequest
は理にかなっているようですが、ブレークポイントを設定しGetVaryByCustomString
てもヒットしないため、これは正しくないと思います。
誰かが私がここで欠けているものを教えてもらえますか?または、これを別の方法で行う必要がある場合はどうなりますか?
編集:以下のREダリンの答え、私はすでに私の行動を次のように飾っています:
[CustomOutputCache(CacheProfile = "FundScreener")] // or similar depending on the action
ここで、CustomOutputCacheAttribute
は次のように定義されます。
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public class CustomOutputCacheAttribute: OutputCacheAttribute
{
public override void OnResultExecuted(ResultExecutedContext filterContext)
{
AddLabelFilesDependency(filterContext);
base.OnResultExecuted(filterContext);
}
private static void AddLabelFilesDependency(ControllerContext filterContext)
{
IConfigurationManager configurationManager = ObjectFactory.TryGetInstance<IConfigurationManager>();
if (configurationManager == null
|| filterContext == null
|| filterContext.RequestContext == null
|| filterContext.RequestContext.HttpContext == null
|| filterContext.RequestContext.HttpContext.Response == null
)
{
return;
}
string[] files = Directory.GetFiles(configurationManager.LabelsDirectoryPath, "*.xml");
foreach(var file in files)
{
filterContext.RequestContext.HttpContext.Response.AddFileDependency(file);
}
}
}
ここで、プロファイルは次のように定義されます。
<add name="FundScreener"
location="Server"
enabled="true"
varyByParam="*"
duration="1200"
sqlDependency="mmftms:offline.ScreenerData"/>
これを変更する必要がありますか?