7

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

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

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

所以我想要做的是在出现异常时使特定的输出缓存无效,或者在出现异常时可能不缓存。如何才能做到这一点?

这适用于 ASP.NET 3.5 Webforms。

4

2 回答 2

5

您应该能够删除缓存项

HttpResponse.RemoveOutputCacheItem("/MyPage/MyParameter");
于 2012-05-14T14:27:41.210 回答
3

假设您的异常到达Application_ErrorGlobal.asax,您可以尝试以下操作:

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;
}

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

于 2013-01-23T20:56:10.507 回答