在我的asp.net表单应用中。我正在尝试阻止某些页面的缓存。 为此,我使用Response.AppendHeader设置了一系列缓存控制标头 e.g。
protected override void OnLoad(Eventargs e) { ... Response.ClearHeaders(); Response.AppendHeader("Cache-Control","no-cache"); .... base.OnLoad(e); }
麻烦的是当我查看我的网站并查看Firefox控制台中的Net选项卡以查看请求/响应标头时,我看到的行为如下:
page1.aspx的POST请求/响应,触发重定向(到page2.aspx) 这里的响应包含正确的标题。
page2.aspx的GET请求/响应 关联响应的缓存控制头只有一个值'pre-check = 0'
第二个请求似乎允许页面发生缓存。 注意:page1.aspx和page2.aspx都有我上面描述的OnLoad逻辑。此外,如果我在page2.aspx上执行某些操作,POST响应将再次具有正确的标题。
我在这里缺少什么?我的期望是,OnLoad中的逻辑应该意味着我总是在响应中得到标题,因此“总是”得到当前版本的页面?
我看到的是firefox加载它的页面缓存版本。
我正在考虑在请求网址中创建一个随机标识符以强制解决问题,但这看起来有点沉重。
- - - - - - - - 更新 看起来,这可能与在'OnLoad'中使用缓存代码有关。 我已将这些标题添加到页面的Page_Load()中并且工作正常吗? 任何想法。
答案 0 :(得分:2)
尝试将Response.AppendHeader("Cache-Control","no-cache");
换成
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetNoStore();
并确保您没有@ OutputCache directive且不是explicitly preventing cache control。请参阅this MSDN page on SetCacheability和SetNoStore。
答案 1 :(得分:0)
您可以尝试使用此页面指令:
<%@ OutputCache Location="None" VaryByParam="None" %>
另请参阅:How to: Set the Cacheability of an ASP.NET Page Declaratively