5

我创建了一个简单的 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。我已经删除了这第三个条件,它现在可以工作了。谢谢大家的回答

4

2 回答 2

3

这应该可以解决问题,在 web.config 中:

<modules runAllManagedModulesForAllRequests="true"></modules>

这是一个快速简便的解决方案,但可能会导致问题/性能问题。

于 2012-01-20T13:10:43.017 回答
1

您需要查看 IIS 中的处理程序映射。

处理程序的工作原理是在 IIS 上,处理程序已注册并应该处理特定类型的页面。您可以查看 IIS 中的“处理程序映射”[在运行命令类型中inetmgr并按 Enter。IIS 管理器将弹出并在 IIS 部分中查找处理程序映射。]

于 2012-01-20T12:53:35.793 回答