J'ai du code qui est utilisé pour remplacer certaines sorties de page par d'autres textes. La façon dont j'accomplis cela est en définissant le Response.Filter à un flux, vidant la réponse, puis relisant ce flux dans une chaîne. De là, je peux manipuler la chaîne et sortir le code résultant. Vous pouvez voir le code de base pour cela à Render a view as a string.Response.Flush brise la mise en cache des pages
Cependant, j'ai remarqué que Page Caching ne fonctionne plus après le premier appel Response.Flush.
J'ai mis en place une simple ASP.NET WebApp à titre d'exemple. J'ai un Default.aspx avec un ensemble @OutputCache pendant 30 secondes. Tout cela est la sortie DateTime.Now.ToLongTimeString(). Je remplace Render. Si je fais un Response.Flush (même après le base.Render) la page n'est pas mise en cache. Ceci est indépendant de toute mise en cache programmatique que j'ai définie.
Il semble donc que Response.Flush mine complètement toute mise en cache de page en cours d'utilisation. Pourquoi est-ce?
crédit supplémentaire: existe-t-il un moyen d'accomplir ce que je veux (rendre la sortie à une chaîne de caractères) qui n'aboutira pas à ce que Cache de page soit contourné?
ASPX Page:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="TestCacheVsFlush._Default" %>
<%@ OutputCache Duration="30" VaryByParam="none" %>
<%= DateTime.Now.ToLongTimeString() %>
code-behind (Page sont mises en cache):
protected override void Render(HtmlTextWriter writer)
{
base.Render(writer);
}
code-behind (Page est pas mises en cache):
protected override void Render(HtmlTextWriter writer)
{
base.Render(writer);
Response.Flush();
}
code-behind (Page est toujours pas mis en mémoire cache):
protected override void Render(HtmlTextWriter writer)
{
base.Render(writer);
Response.Cache.SetCacheability(HttpCacheability.Server);
Response.Cache.SetExpires(DateTime.Now.AddSeconds(30));
Response.Flush();
}
modifier: J'ai mis à jour le titre pour être plus descriptif du problème – hackerhasid
Ceci est une bonne question. Creuser à travers le réflecteur, je ne trouve pas de connexions évidentes à la chasse et la mise en cache .... J'aimerais pouvoir passer plus de temps là-dessus maintenant. – womp