私たちが構築しているMVCアプリケーションからの多くのアクションでは、次のようにOutputCacheを使います。
[OutputCache(Duration = 3600, VaryByCustom = "language")]
public ActionResult SomeAction()
{
//Action..
}
それで、これらのキャッシュをすべて手動でフラッシュできるようなアクションが欲しいのです。
public ActionResult RefrescarCache()
{
var keys = HttpContext.Cache.Cast<DictionaryEntry>().ToList();
keys.ForEach(k => HttpContext.Cache.Remove(k.Key.ToString()));
ViewBag.operationResult= "The cache was flushed succesfully!";
return View();
}
それはうまくいかないようです。私はあなたが持っているどんな考えや助言も非難するつもりです!
回答:
回答№1は1あなたはここで見なければなりません: http://msdn.microsoft.com/en-us/library/system.web.httpresponse.removeoutputcacheitem.aspx
回答№2については2
私たちは同じ問題を抱えていました。
HttpResponse.RemoveOutputCacheItem(url)
Giedriusのようにすでに述べた。
回答№3の場合は0
誰もがすべてのURLをクリアする方法を求めているので...
私は2つの方法を考えることができます:
1 - 痛みを伴うが簡単、きれいになるように仮想パスの配列を維持する。
foreach(string path in myArray){HttpResponse.RemoveOutputCacheItem(path); }
2-反射を使用してすべてを取得します。次に例を示します。 OutputCacheエントリをリストします。
ASP.NETはページをキャッシュするのではなく、IIS(7+)のカーネルキャッシュであるため、これは難しいと思います。