我想重置/清除缓存中的项目,但不重置应用程序或为此编写专门的页面。即,非程序化的解决方案。这可能吗?
答案 0 :(得分:8)
简短回答:不。
ASP.NET Cache没有管理它的管理界面。您需要回收应用程序池,或者创建一个简单的页面来执行Delete Items from the Cache in ASP.NET。
编辑:受到Mick回答的启发,您可以拥有这样的页面(RemoveCache.aspx
):
<%@ Page Language="C#" %>
<script runat="server">
void Page_Load(object sender, EventArgs e)
{
if (String.IsNullOrEmpty(Request.QueryString["name"]))
{
foreach (DictionaryEntry item in Cache)
{
Cache.Remove(item.Key.ToString());
Response.Write(item.Key.ToString() + " removed<br />");
}
}
else
{
Cache.Remove(Request.QueryString["name"]);
}
}
</script>
如果您致电RemoveCache.aspx
,您的所有缓存都将被删除;正在运行RemoveCache.aspx?name=Products
,只会移除Products
缓存条目。
答案 1 :(得分:2)
Dim CacheKeys As New List(Of String)
For Each CacheItem As DictionaryEntry In Cache
CacheKeys.Add(CacheItem.Key)
Next
For Each Key As String In CacheKeys
Cache.Remove(Key)
Next
这似乎通过缓存并清除项目,但它不会清除响应缓存。如果您使用FormsAuthentication登录网页,转到网页,注销,只需在地址栏中输入该URL即可返回该页面。当您单击任何内容时,它会返回登录页面,因为您未经过身份验证,但即使在单击注销按钮时清除了缓存,页面仍会显示在缓存中。将Cachability设置为NoCache不起作用,因为使用DataBound事件的所有GridView在使用后退按钮时都显示为已过期。我仍在为这种情况寻找合适的缓存清理解决方案。
答案 2 :(得分:1)
只提供VB.NET代码,但为什么不循环删除缓存项?
For Each de As DictionaryEntry In HttpContext.Current.Cache
HttpContext.Current.Cache.Remove(DirectCast(de.Key, String))
Next
此致