我在其中一个页面中启用了输出缓存,如下所示:
<%@ OutputCache Duration="300" VaryByParam="*"%>
问题是有时会出现异常,我们会显示相应的消息。但是此页面随后被缓存,其他用户也看到了异常消息。例如,假设数据库超时,因此抛出了Sql异常。捕获此异常并显示一条消息“连接到数据库时出错。请在一段时间后尝试”。现在,此消息被缓存并显示给其他用户,甚至不查询数据库。
所以我想要做的是在有异常的情况下使特定的输出缓存无效,或者在有异常时不缓存。怎么办呢?
这适用于ASP.NET 3.5 Webforms。
答案 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;
}
这将确保下一个响应不会从缓存中提供,但实际上会进入您的页面/控制器。