如果页面上存在异常,则输出缓存无效

时间:2012-05-14 14:06:55

标签: asp.net caching webforms outputcache

我在其中一个页面中启用了输出缓存,如下所示:

<%@ OutputCache Duration="300" VaryByParam="*"%>

问题是有时会出现异常,我们会显示相应的消息。但是此页面随后被缓存,其他用户也看到了异常消息。例如,假设数据库超时,因此抛出了Sql异常。捕获此异常并显示一条消息“连接到数据库时出错。请在一段时间后尝试”。现在,此消息被缓存并显示给其他用户,甚至不查询数据库。

所以我想要做的是在有异常的情况下使特定的输出缓存无效,或者在有异常时不缓存。怎么办呢?

这适用于ASP.NET 3.5 Webforms。

2 个答案:

答案 0 :(得分:5)

您应该可以删除缓存项

HttpResponse.RemoveOutputCacheItem("/MyPage/MyParameter");

答案 1 :(得分:2)

假设您的例外情况到达Global.asax中的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;
}

这将确保下一个响应不会从缓存中提供,但实际上会进入您的页面/控制器。