Asp.net 响应。刷新破坏页面缓存
我有一些代码,用于用其他文本替换某些页面输出。实现这一点的方法是将Response.Filter设置为流,刷新响应,然后将该流读回字符串。从那里我可以操作字符串并输出结果代码。你可以在上看到这个的基本代码 但是,我注意到在第一次响应.Flush调用之后,页面缓存不再工作 我以一个简单的ASP.NET Web应用程序为例。我有一个Default.aspx,其中@OutputCache设置了30秒。这只需要输出DateTime.Now.ToLongTimeString()。我覆盖渲染。如果我执行Response.Flush(即使在base.Render之后),页面也不会被缓存。这与我设置的任何编程缓存能力无关 看来Response.Flush完全破坏了任何正在使用的页面缓存。为什么会这样 额外提示:是否有一种方法可以实现我想要的(将输出呈现为字符串)而不会导致忽略页面缓存 ASPX页面:Asp.net 响应。刷新破坏页面缓存,asp.net,asp.net-mvc,caching,Asp.net,Asp.net Mvc,Caching,我有一些代码,用于用其他文本替换某些页面输出。实现这一点的方法是将Response.Filter设置为流,刷新响应,然后将该流读回字符串。从那里我可以操作字符串并输出结果代码。你可以在上看到这个的基本代码 但是,我注意到在第一次响应.Flush调用之后,页面缓存不再工作 我以一个简单的ASP.NET Web应用程序为例。我有一个Default.aspx,其中@OutputCache设置了30秒。这只需要输出DateTime.Now.ToLongTimeString()。我覆盖渲染。如果我执行Re
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="TestCacheVsFlush._Default" %>
<%@ OutputCache Duration="30" VaryByParam="none" %>
<%= DateTime.Now.ToLongTimeString() %>
protected override void Render(HtmlTextWriter writer)
{
base.Render(writer);
}
protected override void Render(HtmlTextWriter writer)
{
base.Render(writer);
Response.Flush();
}
protected override void Render(HtmlTextWriter writer)
{
base.Render(writer);
Response.Cache.SetCacheability(HttpCacheability.Server);
Response.Cache.SetExpires(DateTime.Now.AddSeconds(30));
Response.Flush();
}
代码隐藏(页面未缓存):
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="TestCacheVsFlush._Default" %>
<%@ OutputCache Duration="30" VaryByParam="none" %>
<%= DateTime.Now.ToLongTimeString() %>
protected override void Render(HtmlTextWriter writer)
{
base.Render(writer);
}
protected override void Render(HtmlTextWriter writer)
{
base.Render(writer);
Response.Flush();
}
protected override void Render(HtmlTextWriter writer)
{
base.Render(writer);
Response.Cache.SetCacheability(HttpCacheability.Server);
Response.Cache.SetExpires(DateTime.Now.AddSeconds(30));
Response.Flush();
}
代码隐藏(页面仍未缓存):
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="TestCacheVsFlush._Default" %>
<%@ OutputCache Duration="30" VaryByParam="none" %>
<%= DateTime.Now.ToLongTimeString() %>
protected override void Render(HtmlTextWriter writer)
{
base.Render(writer);
}
protected override void Render(HtmlTextWriter writer)
{
base.Render(writer);
Response.Flush();
}
protected override void Render(HtmlTextWriter writer)
{
base.Render(writer);
Response.Cache.SetCacheability(HttpCacheability.Server);
Response.Cache.SetExpires(DateTime.Now.AddSeconds(30));
Response.Flush();
}
好吧,我想我有一个部分答案给你 发件人: 输出缓存模块填充 IHttpCachePolicy内在于 如果匹配,则开始请求阶段 已找到配置文件。其他模块可以 仍要更改服务器的缓存策略 可能更改的当前请求 用户模式或内核模式缓存 行为。输出缓存200 仅获取请求的响应如果 某些模块已经刷新了 请求到达时的响应 UpdateRequestCache阶段或if标头 被抑制时,响应不会被缓存 在输出缓存模块中 那篇文章是针对IIS7的,所以不确定这篇文章是如何翻译成其他版本的,但可能是类似的
UpdateRequestCache
是其中之一,它发生在IHttpHandler(例如,您的页面对象)完成处理请求后
所以。。。在页面内执行刷新看起来不太好。edit:我更新了标题以更能描述问题这是一个很好的问题。通过反射器挖掘,我没有发现任何与刷新和缓存的明显联系。。。。希望我现在能花更多的时间在上面。仅供参考,这也发生在IIS6中。