HttpModule不拦截IIS 5.1中的js和css文件

时间:2011-02-14 14:18:35

标签: c# asp.net httpmodule

我正在实现HttpModule来压缩请求。 下面是HttpModule的代码:

public class Global : IHttpModule
{
public void Init(HttpApplication app)
{
    app.PostReleaseRequestState += new EventHandler(app_PostReleaseRequestState);
}
void app_PostReleaseRequestState(object sender, EventArgs e)
{
    HttpApplication app = (HttpApplication)sender;
    HttpContext context = app.Context;
    string acceptEncoding = context.Request.Headers["Accept-Encoding"];




        // If gzip is supported then gzip it else if deflate compression is supported then compress in that technique.
        if (acceptEncoding.Contains("gzip"))
        {
            // Compress and set Content-Encoding header for the browser to indicate that the document is zipped.
            context.Response.Filter = new GZipStream(context.Response.Filter, CompressionMode.Compress);
            context.Response.AppendHeader("Content-Encoding", "gzip");
        }
        else if (acceptEncoding.Contains("deflate"))
        {
            // Compress and set Content-Encoding header for the browser to indicate that the document is zipped.
            context.Response.Filter = new DeflateStream(context.Response.Filter, CompressionMode.Compress);
            context.Response.AppendHeader("Content-Encoding", "deflate");
        }


}

它可以拦截和压缩开发Web服务器中的js和css,但是当我从IIS 5.1运行它时 它无法压缩js和css文件。 请帮忙。

3 个答案:

答案 0 :(得分:1)

我会确保.js和.css文件由.NET框架处理。

可以在iis.net/ConfigReference/system.webServer/handlers

找到IIS 7及更高版本的参考资料。

关于IIS 6,您可以检查js和css是否在以下位置处理: 站点设置/主目录/应用程序设置/(应用程序池)配置/映射

答案 1 :(得分:1)

在IIS7之前,将非ASP.NET文件类型转换为ASP.NET管道需要设置文件类型映射以通过ISAPI重定向这些文件。如果您要映射*.js*.css以供ISAPI处理,那么您的代码应该开始针对这些请求运行。

以下是an example of doing that in IIS6(尽管您希望将*.js*.css替换为*.asp)。如果我没记错的话,5.1的管理界面足够相似,以至于ScottGu的例子仍然有用。

答案 2 :(得分:0)

你使用HttpModule走在正确的轨道上。但是,为了更改HTML内容,您将使用HttpApplication.PostReleaseRequestState处理程序。要更改资源文件,您可以使用HttpApplication.BeginRequest处理程序。