【问题标题】:How to stop an ASP.NET webforms page caching different versions如何停止缓存不同版本的 ASP.NET 网络表单页面
【发布时间】:2014-03-27 19:10:42
【问题描述】:

我有一个默认页面,可以显示 3 种不同的内容,具体取决于:

  1. 用户未登录
  2. 用户已登录但尚未设置任何内容
  3. 用户已登录并进行了设置

实际情况是,(1) 和 (2) 有时会在应该显示为另一个时显示。在我 ctrl-r 后,显示正确的版本。
这与浏览器的后退按钮无关,它发生在单击菜单选项以转到默认页面或执行一些将用户带到默认页面的操作之后。

我还为该页面设置了一个路由,以便可以在其上附加用户名。例如:http://www.example.com/user1234

我提到这个以防它可能与它有关。

这是我试图停止缓存的原因:

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

那没用,所以我尝试了(在 Page_Load 中):

Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache)
Response.Cache.SetNoStore()

任何想法我做错了什么?

预计到达时间

根据几个cmets,我在Chrome隐身模式下尝试过,没有问题。我也尝试打开控制台来查看标题,但不幸的是问题消失了。无论如何,这是标题:

请求

GET / HTTP/1.1 主机:localhost:2873 连接:keep-alive
缓存控制:max-age=0 接受: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8 用户代理:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, 像壁虎)Chrome/34.0.1847.92 Safari/537.36 参考:.../signin 接受编码:gzip,deflate,sdch 接受语言:en-US,en;q=0.8
饼干:...

回应

HTTP/1.1 200 OK Cache-Control: no-cache, no-store Pragma: no-cache 内容类型:文本/html; charset=utf-8 内容编码:gzip
过期:-1 变化:接受编码服务器:Microsoft-IIS/8.0
X-AspNet 版本:4.0.30319 X-SourceFiles:=?UTF-8?B?...
X-Powered-By:ASP.NET 日期:2014 年 3 月 27 日星期四 20:17:39 GMT
内容长度:3045

ETA2

我在 Chrome 中进行了测试,我刚刚发现在 FireFox 中没有问题。

如果我登录/退出/进入/退出...没有问题
如果我登录/注销然后用错误的密码登录了几次(导致登录页面中的回发),然后再次正确登录,它总是在 Chrome 中显示不正确的注销页面。

【问题讨论】:

  • 这在 Chrome Incognito 中是否正常工作? (这可能有助于排除任何编码问题)。如果您使用 Fiddler,您是否看到它在显示错误的情况下发出请求? (我假设您没有看到请求 - 它确实正在加载缓存副本)
  • 如果没有 Fiddler,可以使用 Chrome 开发工具。响应标头是否具有 max-age=0 和/或 no-cache 值?
  • 一些很棒的想法,谢谢,我会尝试一下......
  • 好的,它在隐身模式下工作正常。不幸的是,量子效应会在控制台打开时发挥作用,但不会发生。我将为默认页面添加请求和响应标头,当它工作时,无论如何。
  • 你是否使用任何 URL 重写?

标签: asp.net caching browser-cache


【解决方案1】:

我遇到了同样的问题。我所做的就是放置这个

Response.CacheControl = "无缓存";

在任何其他代码运行之前加载页面。这为我解决的问题与您的类似。当用户登录时,下拉框会加载用户所属的不同商店。如果我更改了他们的商店,他们可以导航回页面并查看他们的旧商店。我将上述内容放在页面加载中,这解决了我在 IE、Chrome 和 Firefox 中的问题。希望像这样简单的事情可以解决您的问题。

【讨论】:

  • 谢谢,我会尝试的,虽然我之前尝试过其他“权威”Response.Cache.*,所以没有抱太大希望。手指交叉!我明天去测试...
  • 不幸的是它不起作用:(我只在Chrome中遇到这个问题,而不是FF。我刚刚测试了登录到另一个页面并注销。注销后它回到了默认页面并显示登录页面。我必须按 ctrl-r 才能显示正确的页面。
  • 遇到了同样的问题。上面的跛脚并没有解决它,因为它修复了我的。
  • Humpy,您是否直接按名称引用您的主页?例如。 mywebsite.com/home 或像这样:http/myswebsite.com?如果我在重定向中使用名称,问题就会消失。
  • 它是我的站点管理员,我使用 ~/Folder/Page.aspx 进行重定向,如果它只是我的主页,它是 ~/Home.aspx。
【解决方案2】:

要解决特定文件的缓存问题,您必须添加

<location path="WebForm1.aspx">
        <system.webServer>
            <caching enabled="false" enableKernelCache="false" />
        </system.webServer>
</location>

进入您的 web.config 的配置部分。

您也可以使用 IIS 来完成。使用 IIS 设置无缓存的步骤如下。

  1. 转到您的站点内容视图。右键单击文件并切换到功能视图。

  1. 选择文件打开输出缓存从 IIS 打开。

  1. 从右侧的操作窗格中单击编辑功能设置,然后从对话框中取消选中Enable cacheEnable kernal cache。单击确定将设置保存到 web.config。

【讨论】:

  • 另一个失败:(我很确定这与使用路由有关,但不知道如何解决。
【解决方案3】:

看看这里并检查它是否有希望http://dotnet.dzone.com/articles/programmatically-clearing-0

【讨论】:

    猜你喜欢
    • 2014-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-15
    • 2010-10-25
    • 2011-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多