gpt4 book ai didi

asp.net - 在使用 dynamicCompressionBeforeCache 缓存之前重写 asp.net 响应

转载 作者:行者123 更新时间:2023-12-04 11:43:22 29 4
gpt4 key购买 nike

我的 ASP.NET 库安装了一个响应过滤器来解析和更改页面的 HTML 输出。这一直有效,直到在 web.config 中启用以下内容:

<system.webServer>
<urlCompression doDynamicCompression="true" dynamicCompressionBeforeCache="true" />
</system.webServer>

我的响应过滤器仍然被调用,但传递的似乎是压缩数据,而不是原始 HTML。

如何确保在页面存储在输出缓存中之前进行重写?

将 dynamicCompressionBeforeCache 设置为 false 不是一个选项,因为该库旨在用于其他人的 Web 应用程序,这些应用程序可能有充分的理由启用压缩。

最佳答案

alexb 的回答帮助我找到了解决方案。

关键是意识到我的响应过滤器是在 IIS DynamicCompressionModule 之后运行的。这可以通过在请求处理程序执行后立即刷新响应来强制过滤器运行来解决。

public class MyModule : IHttpModule
{
public void Init(HttpApplication application)
{
application.BeginRequest += application_BeginRequest;
application.PostRequestHandlerExecute += application_PostRequestHandlerExecute;
}

void application_BeginRequest(object sender, EventArgs e)
{
// Install response filter
var response = ((HttpApplication)sender).Context.Response;
response.Filter = new RewritingFilter(response.Filter);
}

void application_PostRequestHandlerExecute(object sender, EventArgs e)
{
// Flush immediately after the request handler has finished.
// This is Before the output cache compression happens.
var response = ((HttpApplication)sender).Context.Response;
response.Flush();
}

public void Dispose()
{
}
}

关于asp.net - 在使用 dynamicCompressionBeforeCache 缓存之前重写 asp.net 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7363717/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com