设置ASP.NET Cache控件头

时间:2012-01-09 16:08:46

标签: asp.net webforms

在我的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选项卡以查看请求/响应标头时,我看到的行为如下:

  1. page1.aspx的POST请求/响应,触发重定向(到page2.aspx) 这里的响应包含正确的标题。

  2. page2.aspx的GET请求/响应 关联响应的缓存控制头只有一个值'pre-check = 0'

  3. 第二个请求似乎允许页面发生缓存。 注意:page1.aspx和page2.aspx都有我上面描述的OnLoad逻辑。此外,如果我在page2.aspx上执行某些操作,POST响应将再次具有正确的标题。

    我在这里缺少什么?我的期望是,OnLoad中的逻辑应该意味着我总是在响应中得到标题,因此“总是”得到当前版本的页面?

    我看到的是firefox加载它的页面缓存版本。

    我正在考虑在请求网址中创建一个随机标识符以强制解决问题,但这看起来有点沉重。

    - - - - - - - - 更新 看起来,这可能与在'OnLoad'中使用缓存代码有关。 我已将这些标题添加到页面的Page_Load()中并且工作正常吗? 任何想法。

2 个答案:

答案 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 SetCacheabilitySetNoStore

答案 1 :(得分:0)

您可以尝试使用此页面指令:

<%@ OutputCache Location="None" VaryByParam="None" %>

另请参阅:How to: Set the Cacheability of an ASP.NET Page Declaratively