【发布时间】:2012-02-15 00:47:44
【问题描述】:
我创建了一个简单的 HttpModule,它在将响应发送到客户端之前从响应中删除空格。这适用于 IIS7.0 上的 aspx 页面,但如果我创建一个静态 html 页面并调用它,HttpModule 不会启动(我知道的方式是因为源包含空格,否则应该删除)。显然有些事情我做得不对,但不知道是什么。
我的网站位于使用 .NET 4.0 和 ManagedPipelineMode = Integrated 的应用程序池中。
我已将我的模块添加为 ManagedModule,并引用 GAC 的强名称密钥程序集。
谢谢
编辑-这里是 web.config 中的 system.webserver 部分
<system.webServer>
...
<modules runAllManagedModulesForAllRequests="true">
<add name="RemoveWhitespaceHttpModule"
type="HttpModules.Modules.RemoveWhitespaceHttpModule, HttpModules,
Version=1.0.0.0, Culture=neutral, PublicKeyToken=8a83u4bi47o9fo0d"
preCondition="" />
</modules>
<defaultDocument>
<files>
<add value="TestForm.aspx" />
</files>
</defaultDocument>
</system.webServer>
编辑 - 修复它。对于任何感兴趣的人,这就是我的模块检查响应然后决定是否继续删除空格的方式
if (contentType.Equals("text/html")
&& httpContext.Response.StatusCode == 200
&& httpContext.CurrentHandler != null)
{ ... }
问题在于上面的第三个条件 httpContext.CurrentHandler != null。在为静态 .html 页面调用此模块时,currentHandler 为空,因此代码从未进入内部来操作 html。我已经删除了这第三个条件,它现在可以工作了。谢谢大家的回答
【问题讨论】:
-
将您的静态 .html 页面重命名为 .aspx(无需更改内容),一切正常
-
@alex - 这不是我想要实现的。我可以很容易地做到这一点,根本不提出这个问题。我希望这个 httpmodule 不仅可以用于 asp.net 应用程序,还可以用于冷融合应用程序。我的目标是让它适用于 .html 页面并从那里获取它。
-
@jrummell - 谢谢。但这并不能真正回答我的问题 :) 我不想启用 gzip(因为我们使用的负载均衡器不支持它!)
标签: asp.net c#-4.0 iis-7 static-html