如何在 ASP.Net 中从 outputcache 中取消缓存当前页面

How to Uncache current page from outputcache in ASP.Net

提问人:Al Davinci Leonardo 提问时间:7/8/2021 最后编辑:Selim YildizAl Davinci Leonardo 更新时间:7/8/2021 访问量:95

问:

我已经为我的 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.

}
asp.net 错误处理输出 缓存

评论


答:

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_ErrorGlobal.asaxApplication_Error)