use*_*331 1 asp.net caching cache-control
我似乎有问题而且我找不到解决方案....我有一个ASP.NET搜索表单,当用户点击结果然后单击浏览器的后退按钮时,用户将被定向到一个页面'网页已过期'
我知道这是缓存问题,这是我试过的...
protected void Page_Init(object sender, EventArgs e)
{
Response.AppendHeader("Cache-Control", "no-cache");
}
Run Code Online (Sandbox Code Playgroud)
和
protected void Page_Init(object sender, EventArgs e)
{
Response.AppendHeader("Cache-Control", "no-cache, no-store, must-revalidate");
Response.AppendHeader("Pragma", "no-cache");
Response.AppendHeader("Expires", "0");
}
Run Code Online (Sandbox Code Playgroud)
这些解决方案似乎都不起作用,任何人都知道为什么?
我也尝试过这个......
Response.Cache.SetExpires(DateTime.Now.AddMinutes(-1));
Run Code Online (Sandbox Code Playgroud)
但它没有用.
我做了更多的挖掘,我用Fiddler检查我的标题,它说Cache-Control: private, no-store, must-revalidate我没有将我的Cache-Control设置为私有的任何地方......我所有的都是导入,我的导入之一是否有可能是Cache-Control在他们中?
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using CMS.UIControls;
using CMS.GlobalHelper;
using CMS.CMSHelper;
using CMS.Controls;
Run Code Online (Sandbox Code Playgroud)
此问题与缓存控制标头无关.对于包含和不包含缓存标头的搜索结果页面,您会看到类似的错误.
这里的问题是您的搜索表单是通过Http POST提交的.这意味着搜索字段作为POST主体的一部分提交给服务器.浏览器将其视为表单提交(就像提交联系页面一样).浏览器内置机制以防止多次重新发布相同的表单,因为没有经验的用户可能会在不知情的情况下偶然发生这种情况.
例如,假设您有一个向您发送公司电子邮件的联系表单.用户可以通过发布表单向您发送消息,然后单击"返回","转发","返回","转发","返回","转发",您不希望收到3或4份副本同样的消息.因此,当您导航回到表单POST结果的页面时,浏览器会发出警告(某些浏览器允许您单击"再次提交",但这不是必需的).
好的,答案是什么?您需要通过Http GET方法提交搜索查询.这通常会导致搜索字符串出现在搜索结果页面的查询字符串中.例如,Google在大多数情况下在查询字符串变量'q'中对其搜索字符串进行编码.您可能有一个看起来像'SearchResults.aspx?q = Test%20Phrase'的页面.请注意,搜索短语是在查询字符串中提供的(作为页面URL的一部分)而不是在POST正文中?
有关如何在ASP.net的以邮件为中心的方式完成此操作的更多信息,请查看?">此stackoverflow帖子.@Solburn提供的示例是此帖子中最好的示例.