如何清除asp.net mvc 4.6.1中的所有输出缓存

问题描述 投票:0回答:1

我想清除控制器中的所有输出缓存。项目是asp.net MVC 4.6.1我使用了以下代码,但由于“ ci.GetValue(HttpRuntime.Cache)作为CacheStoreProvider”而面临编译错误。如何清除控制器中的所有输出缓存?

        var runtimeType = typeof(System.Web.Caching.Cache);
        var ci = runtimeType.GetProperty(
           "InternalCache",
           BindingFlags.Instance | BindingFlags.NonPublic);

        var cache = ci.GetValue(HttpRuntime.Cache) as CacheStoreProvider;

        var enumerator = cache.GetEnumerator();

        List<string> keys = new List<string>();

        while (enumerator.MoveNext())
        {
            keys.Add(enumerator.Key.ToString());
        }
        foreach (string key in keys)
        {
            cache.Remove(key);
        }
asp.net asp.net-mvc asp.net-mvc-4 caching outputcache
1个回答
0
投票
public static void ClearOutputCache() { var runtimeType = typeof(HttpRuntime); var ci = runtimeType.GetProperty( "CacheInternal", BindingFlags.NonPublic | BindingFlags.Static); var cache = ci.GetValue(ci, new object[0]); var cachesInfo = cache.GetType().GetField( "_caches", BindingFlags.NonPublic | BindingFlags.Instance); var cacheEntries = cachesInfo.GetValue(cache); var outputCacheEntries = new List<object>(); foreach (Object singleCache in cacheEntries as Array) { var singleCacheInfo = singleCache.GetType().GetField("_entries", BindingFlags.NonPublic | BindingFlags.Instance); var entries = singleCacheInfo.GetValue(singleCache); foreach (DictionaryEntry cacheEntry in entries as Hashtable) { var cacheEntryInfo = cacheEntry.Value.GetType().GetField("_value", BindingFlags.NonPublic | BindingFlags.Instance); var value = cacheEntryInfo.GetValue(cacheEntry.Value); if (value.GetType().Name == "CachedRawResponse") { var key = (string)cacheEntry.Value.GetType().BaseType.GetField("_key", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(cacheEntry.Value); key = key.Substring(key.IndexOf("/")); outputCacheEntries.Add(key); } } } foreach (string key in outputCacheEntries) { HttpResponse.RemoveOutputCacheItem(key); } }
© www.soinside.com 2019 - 2024. All rights reserved.