设置 ASP.NET 缓存控制标头

Tyg*_*ash 4 asp.net webforms

在我的 asp.net 表单应用程序中。我试图阻止缓存某些页面。为此,我使用 Response.AppendHeader 设置了一系列缓存控制标头,例如

protected override void OnLoad(Eventargs e) 
{
...
Response.ClearHeaders();
Response.AppendHeader("缓存控制","无缓存");
....
base.OnLoad(e);
}

问题是当我查看我的网站并查看 Firefox 控制台中的 Net 选项卡以查看请求/响应标头时,我看到了如下行为:

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

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

第二个请求似乎允许对页面进行缓存.. 注意:page1.aspx 和 page2.aspx 都具有我上面描述的 OnLoad 逻辑。此外,如果我对 page2.aspx 采取一些措施,POST 响应将再次具有正确的标头。

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

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

我正在考虑在请求 url 中创建一个随机标识符来强制执行此操作,但这似乎有点笨手笨脚。

-----更新----- 看来,这可能与'OnLoad'中的缓存代码有关。我已经将这些标题添加到页面的 Page_Load() 中,它工作正常吗?有什么想法吗。

Dav*_*ner 5

尝试换出Response.AppendHeader("Cache-Control","no-cache");

Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetNoStore();
Run Code Online (Sandbox Code Playgroud)

并确保您没有@OutputCache 指令并且没有明确阻止缓存控制。请参阅有关 SetCacheabilitySetNoStore 的MSDN 页面