提问人:Al Davinci Leonardo 提问时间:7/8/2021 最后编辑:Selim YildizAl Davinci Leonardo 更新时间:7/8/2021 访问量:95
如何在 ASP.Net 中从 outputcache 中取消缓存当前页面
How to Uncache current page from outputcache in ASP.Net
问:
我已经为我的 ASPX 页面启用了页面缓存
<%@ OutputCache Duration="7200" VaryByParam="*" Location="Server" %>
但是,下次重新生成页面时,如果页面中碰巧出现错误,则该错误也会被缓存,并且站点会在接下来的 7200 秒内继续显示带有错误的页面,或者直到某些依赖项刷新缓存。
目前,我尝试将站点错误日志添加为文件依赖项,以便每当记录错误时,页面都会刷新。但是,这会导致页面刷新,即使网站中的另一个页面有错误也是如此。
问题是,我怎样才能在错误处理块中放一段代码来取消缓存当前页面。
伪代码。
try
{
page load
}
catch (Exception ex)
{
// Add C# code to not cache the current page this time.
}
答:
0赞
Selim Yildiz
7/8/2021
#1
您可以简单地使用 HttpResponse.RemoveOutputCacheItem
,如下所示:
try
{
//Page load
}
catch (Exception ex)
{
HttpResponse.RemoveOutputCacheItem("/mypage.aspx");
}
请参阅:有什么方法可以清除/刷新/删除 OutputCache?
从此解决方案中捕获异常并使用 Response.Cache.AddValidationCallback
的另一种方法:Application_Error
public void Application_Error(Object sender, EventArgs e) {
...
Response.Cache.AddValidationCallback(
DontCacheCurrentResponse,
null);
...
}
private void DontCacheCurrentResponse(
HttpContext context,
Object data,
ref HttpValidationStatus status) {
status = HttpValidationStatus.IgnoreThisRequest;
}
评论
0赞
Al Davinci Leonardo
7/8/2021
这难道不是针对已经生成和缓存的页面吗??
0赞
Al Davinci Leonardo
7/8/2021
在这种情况下,从技术上讲,页面尚未生成,因为我们处于页面加载事件中。但是一旦生成它,它就会被缓存,因为已经插入了 <%@ outputcache ... %> 指令。我认为我正在寻找的是以编程方式删除该指令,以防出现异常。我们是怎么做到的?
0赞
Selim Yildiz
7/8/2021
如果你把它放进去而不是page_load怎么样?(假设您的异常可以被捕获Application_Error
Global.asax
Application_Error
)
评论