【问题标题】:How to make static Html page go through HttpModule in IIS7.0?IIS7.0中如何使静态Html页面通过HttpModule?
【发布时间】: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


【解决方案1】:

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

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

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

【讨论】:

  • 你的模块在 system.webserver > modules 中注册了吗?否则它不会被捡起来。如果是这样,请发布您的 web.config 部分
  • 是的.. 在主要问题中添加了我的 web.config 中的 system.webserver 部分
  • 您的 web.config 看起来不错,除了 runAllManagedModulesForAllRequests="true" 在您的情况下是多余的,因为它只是将所有模块作为您已经拥有的 preCondition="" 运行。你能调试你的模块以确保它被命中吗?
  • 你的答案是最有帮助的,但遗憾的是我不能投票给你(我没有足够的分数来做这件事)。无论如何谢谢你的帮助
【解决方案2】:

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

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

【讨论】:

  • 您建议我具体配置什么。我已经尝试使用 *.html 添加处理程序映射,但这没有任何目的
  • 他问的是 HttpModule,而不是 HttpHandler
猜你喜欢
  • 2010-11-02
  • 1970-01-01
  • 2014-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-21
  • 2012-02-15
  • 1970-01-01
相关资源
最近更新 更多