IIS 处理程序映射

fro*_*r78 4 iis configuration web-server handler-mappings

假设配置了多个处理程序映射来处理一个请求,在 IIS 中,确定使用哪个处理程序映射来提供响应的算法是什么?

Kev*_*Kev 5

我假设您在询问 IIS7 处理程序映射。

preCondition每个处理程序映射都有一个隐藏在 IIS 管理器视图中的属性。例如,这里是页面可以具有applicationHost.config的所有不同页面处理程序的摘录.aspx(我删除了一些属性以保持简洁):

<add name="PageHandlerFactory-ISAPI-4.0_32bit" path="*.aspx" 
     preCondition="classicMode,runtimeVersionv4.0,bitness32" />
<add name="PageHandlerFactory-ISAPI-4.0_64bit" path="*.aspx" 
     preCondition="classicMode,runtimeVersionv4.0,bitness64" />
<add name="PageHandlerFactory-Integrated-4.0" path="*.aspx" 
     preCondition="integratedMode,runtimeVersionv4.0" />
<add name="PageHandlerFactory-Integrated" path="*.aspx" 
     preCondition="integratedMode" />
<add name="PageHandlerFactory-ISAPI-2.0" path="*.aspx" 
     preCondition="classicMode,runtimeVersionv2.0,bitness32" />
<add name="PageHandlerFactory-ISAPI-2.0-64" path="*.aspx" 
     preCondition="classicMode,runtimeVersionv2.0,bitness64" />
Run Code Online (Sandbox Code Playgroud)

当请求通过 IIS 管道传递时,仅使用.aspx与其匹配的处理程序。preCondition

通常preConditions映射到站点或应用程序运行的应用程序池的配置。

因此,如果我有一个在应用程序池中运行的站点,配置为:

.NET Framework 版本 [托管运行时版本] = v2.0
启用 32 位应用程序 [enable32BitAppOnWin64] = True
托管管道模式 [managementPipelineMode] = 经典

如果Default.aspx收到请求,则选择处理该请求的处理程序将是:

PageHandlerFactory-ISAPI-2.0

有一篇很棒的文章preConditions在这里进行了更详细的解释:

阿赫东!IIS7先决条件

我忘了说处理程序映射的顺序也是一个考虑因素,特别是对于通配符和无扩展映射。可以在 IIS 管理器中查看/更改这些顺序,方法是打开站点的处理程序映射功能,然后单击右侧“操作”窗格中的“查看有序列表”链接。在此视图中,您可以更改处理程序的处理顺序。