IIS 集成模式 导致 AjaxPro 无法正常运行

web.config 配置如下:

system.web/httphandlers

<httpHandlers>
      <add verb="POST,GET" path="ajaxpro/*.ashx" type="AjaxPro.AjaxHandlerFactory,AjaxPro" />
</httpHandlers>

system.webServer/handlers

<handlers>
      <add name="AjaxPro" verb="POST,GET" type="AjaxPro.AjaxHandlerFactory,AjaxPro" path="ajaxpro/*.ashx" />
</handlers>

如上配置在IIS7集成模式下没有问题,但部署到服务其它低版本服务器上会有问题。因为低版本没有集成模式,默认是经典模式。所以为了兼容老版本配置,删除system.webServer节点下的AjaxPro注册,统一使用经典模式,则此问题得以解决。

以下是微软官方对于system.webServer的解释:

system.webServer 节中的某些设置只适用于 IIS 7.0 集成模式,而不适用于经典模式。具体而言,如果应用程序正在经典模式下运行,则会忽略 Web.config 文件的 system.WebServer 节中指定的所有托管代码模块和处理程序。与 IIS 的早期版本相同,托管代码模块和处理程序必须在 system.web 节的 httpModuleshttpHandlers 元素中定义。

本主题阐释需要修改 system.webServer 节的三个常见配置任务:

  • 添加默认文件,以便在请求 URL 未包含特定的文件时,提供该默认文件。

  • 注册托管代码模块。

  • 添加自定义响应标头