MVC4 で使用する MongoDB とメモリを組み合わせた出力キャッシュ プロバイダーを実装しようとしています。これが私の最初の実装です:
public class CustomOutputCacheProvider : OutputCacheProvider
{
public override object Get(string key)
{
FileLogger.Log(key);
return null;
}
public override object Add(string key, object entry, DateTime utcExpiry)
{
return entry;
}
public override void Set(string key, object entry, DateTime utcExpiry)
{
}
public override void Remove(string key)
{
}
}
そして私のウェブ設定エントリ:
<caching>
<outputCache defaultProvider="CustomOutputCacheProvider">
<providers>
<add name="CustomOutputCacheProvider" type="MyApp.Base.Mvc.CustomOutputCacheProvider" />
</providers>
</outputCache>
</caching>
そして HomeController 内での使用法:
[OutputCache(Duration = 15)]
public ActionResult Index()
{
return Content("Home Page");
}
私の問題は、要求されたキーのログファイルを確認すると、ホームコントローラーへの要求だけでなく、他のすべてのパスも表示されることです。
a2/ <-- should only log this entry
a2/test
a2/images/test/50115c53/1f37e409/4c7ab27d/50115c531f37e4094c7ab27d.jpg
a2/scripts/jquery-1.7.2.min.js
CustomOutputCacheProvider を Web.Config の defaultProvider として設定するべきではないと考えました。特定のコントローラー アクションに使用するキャッシュ プロバイダーを指定する方法がわかりませんでした。
Asp.Net Web ページを使用する<%@ OutputCache Duration="60" VaryByParam="None" providerName="DiskCache" %>
と、ページの上部で使用してそれを実現できますが、MVC の場合、私が見つけた唯一の解決策は、Global.asax のHttpApplication.GetOutputCacheProviderName メソッドをオーバーライドすることです。
[OutputCache] 属性を使用してこれを達成するためのよりエレガントな方法はありますか?