如何缓存asmx/js永久呼叫?我尝试了HTTPModule并实现了缓存。但是,此缓存值在下次登录时即将过期。它被重置为最后一次修改日期的一年。通过代码我不这样做。在asmx中是否有任何默认设置?如果是这样,有没有办法覆盖设置?缓存asmx/js不会持续
我用下面的代码来实现这一点。实际上,我的要求是将这个调用(GetMygrid.asmx/js)缓存在浏览器缓存中几天,并避免304响应。我可以使用HTTPModule缓存这个调用。
private void EndRequest(object sender, EventArgs e)
{
HttpApplication application = (HttpApplication)sender;
HttpContext context = application.Context;
var path = context.Request.Path.ToLower().Replace('\\', '/');
if (path.EndsWith("/js") || path.EndsWith("/jsdebug"))
{
var lastModified = DateTime.UtcNow;
var expires = lastModified + TimeSpan.FromDays(5);
context.Response.Cache.SetLastModified(lastModified);
context.Response.Cache.SetExpires(expires);
context.Response.Cache.SetCacheability(HttpCacheability.Public);
}
}
此代码在运行时正常工作,而我多次访问特定页面。 (GetMygrid.asmx/js)在访问页面并获取以下缓存标题时,我没有收到304响应。
的Cache-Control:公共
截止日期:星期一,2012年2月27日4时52分11秒GMT
的Last-Modified:星期三,2012 02月22日4时52分11秒GMT
服务器:Microsoft-IIS/7.5
但我的问题是,当我在app(关闭浏览器,然后登录)登录接下来的时间,这个缓存过期的d值改变回去一年。我正在使用GET
方法进行此调用。
缓存控制:私人
内容类型:应用程序/ x-的JavaScript;字符集= UTF-8
内容编码:gzip
到期日:星期一,2011年2月21日15点35分48秒GMT
上次修改:星期三,2012 02月22日4时39分37秒GMT
在登录期间,应用程序中没有任何代码可以重置缓存。
不理解为什么会发生。
有人能帮我吗?
如果您将InlineScript =“True”添加到页面上的服务参考,脚本将作为内联脚本。这减少了往返。但是,这意味着它们不会被包含在缓存中(如果您的缓存成功了,我还没有成功)。 – 2017-03-03 20:43:36