Nous avons un code assez commun qui fonctionne bien :
public class CompressionFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
HttpRequestBase request = filterContext.HttpContext.Request;
if (request.IsAjaxRequest())
return;
string acceptEncoding = request.Headers["Accept-Encoding"];
if (string.IsNullOrEmpty(acceptEncoding)) return;
acceptEncoding = acceptEncoding.ToUpperInvariant();
HttpResponseBase response = filterContext.HttpContext.Response;
if (acceptEncoding.Contains("GZIP"))
{
response.AppendHeader("Content-encoding", "gzip");
response.Filter = new WhitespaceFilter(new GZipStream(response.Filter, CompressionMode.Compress));
}
else if (acceptEncoding.Contains("DEFLATE"))
{
response.AppendHeader("Content-encoding", "deflate");
response.Filter = new WhitespaceFilter(new DeflateStream(response.Filter, CompressionMode.Compress));
}
}
}
J'essaie maintenant d'utiliser Response.Flush()
pour fournir une partie de la page, pour améliorer l'expérience de l'utilisateur. Avec ce scénario, lorsque response.Filter
est modifié par chaque opération d'écriture, il est clair que la page doit être livrée en une seule fois. Comment puis-je faire en sorte que mon application écrive dans un flux intermédiaire, puis le compresse, et enfin le pousse vers le serveur de l'entreprise ? Response.Filter
?