ASP.net自定义Http模块 - IhttpModule

时间:2014-09-09 09:36:24

标签: c# asp.net iis gzip httpmodule

运行IIS 7

我正在尝试实现自定义Http模块,我真正想要的是实现gzip压缩。

似乎有几种方法可以做到这一点。

我试图通过访问HttpApplication.BeginRequest事件并在那里添加一些将使用gzip的代码来做到这一点。

我正在使用umbraco所以我没有global.asax文件所以我得到的是我网站的应用程序代码文件夹中的类文件:

public class GzipHttpCompressionModule : IHttpModule
{
public GzipHttpCompressionModule()
{}

public void Dispose()
{}

public void Init(HttpApplication context)
{
    context.BeginRequest +=
        (new EventHandler(this.Application_BeginRequest));

}

private void Application_BeginRequest(object sender, EventArgs e)
{
    HttpContext context = HttpContext.Current;
    context.Response.Filter = new GZipStream(context.Response.Filter, CompressionMode.Compress);
    HttpContext.Current.Response.AppendHeader("Content-encoding", "gzip");
    HttpContext.Current.Response.Cache.VaryByHeaders["Accept-encoding"] = true;
}

}

然后在我的web-config文件中注册模块

<httpModules>
..
<!-- Register Custom Http Gzip Module   -->
<add name="GzipHttpCompressionModule" type="GzipHttpCompressionModule"/>
..
</httpModules>

当我在Application_BeginRequest中设置一个断点时,它在我浏览网站时永远不会被击中

Enable IIS7 gzip&lt;&lt;第四个回答是我试图实现的技术。

有什么想法吗?为什么这不起作用?

1 个答案:

答案 0 :(得分:2)

<httpModules>标记内的<system.web>标记仅供旧版IIS(&lt; = 6)使用或使用经典模式(不推荐)时使用。请改用<modules>中的<system.webServer>

此处提供更多信息:http://www.byteblocks.com/post/2010/09/16/HttpModule-Not-Working-In-IIS7.aspx