在IIS服务器部署ASP.NET相关应用时,system.webServer节点下的handlers配置是控制请求处理规则的核心部分,它决定了IIS会把特定条件的请求交给哪个处理程序执行,是处理程序映射的关键配置入口。

handlers节点基础结构
handlers节点位于Web.config的configuration/system.webServer路径下,用于定义IIS的请求处理程序集合,基础结构如下:
<configuration>
<system.webServer>
<handlers>
<!-- 处理程序配置项 -->
</handlers>
</system.webServer>
</configuration>
常用配置属性说明
每个处理程序配置项通常是一个add元素,核心属性含义如下:
- name:处理程序的唯一名称,用于标识该配置项,不可重复。
- path:匹配的请求路径规则,支持通配符,比如
*.html表示所有html文件请求,api/*表示api路径下的所有请求。 - verb:匹配的HTTP请求方法,多个方法用逗号分隔,比如
GET,POST,用*表示匹配所有方法。 - type:处理程序的类型全名称,格式为
命名空间.类名,程序集名,如果是IIS内置处理程序则不需要该属性。 - modules:指定处理该请求的IIS模块,比如
IsapiModule、ManagedPipelineHandler等。 - resourceType:指定资源类型,可选值有
File(静态文件)、Directory(目录)、Unspecified(不限制)。 - preCondition:处理程序的预条件,比如
integratedMode表示仅在集成模式下生效,classicMode表示仅在经典模式下生效。
常见配置场景示例
场景1:添加自定义扩展名处理程序
如果需要让IIS把.myext扩展名的请求交给自定义的托管处理程序处理,配置如下:
<handlers>
<add name="MyExtHandler"
path="*.myext"
verb="*"
type="MyApp.Handlers.CustomHandler,MyApp"
modules="ManagedPipelineHandler"
resourceType="Unspecified"
preCondition="integratedMode" />
</handlers>
对应的自定义处理程序需要实现IHttpHandler接口,示例代码如下:
using System.Web;
namespace MyApp.Handlers
{
public class CustomHandler : IHttpHandler
{
public bool IsReusable => false;
public void ProcessRequest(HttpContext context)
{
context.Response.Write("这是自定义扩展名的处理响应");
}
}
}
场景2:放行静态文件访问
如果站点部署后出现css、js等静态文件无法访问的情况,可以添加静态文件处理程序:
<handlers>
<add name="StaticFileHandler"
path="*.css,*.js,*.png,*.jpg,*.gif"
verb="GET"
modules="StaticFileModule"
resourceType="File"
preCondition="integratedMode" />
</handlers>
场景3:移除默认处理程序
如果需要移除IIS默认添加的某个处理程序,可以使用remove元素,比如移除默认的WebService处理程序:
<handlers> <remove name="WebServiceHandlerFactory-Integrated" /> </handlers>
配置注意事项
首先要注意配置冲突问题,如果多个处理程序的path和verb规则重叠,IIS会按照配置顺序优先匹配靠前的规则,因此特殊规则建议放在通用规则前面。
其次要注意IIS模式匹配,集成模式和经典模式的处理程序配置存在差异,如果配置后不生效,可以先检查IIS站点的管道模式是否和preCondition设置一致。
另外如果修改配置后出现500错误,可以打开IIS的失败请求跟踪功能,查看具体的配置错误信息,通常错误原因会明确提示是属性缺失还是类型加载失败。
最后要注意如果是在子目录的Web.config中配置handlers,默认会继承父目录的配置,如果需要覆盖父目录的配置,可以先使用clear元素清空继承的处理程序集合,再添加自己的配置:
<handlers> <clear /> <add name="SubDirHandler" path="*" verb="*" type="MyApp.SubDirHandler,MyApp" modules="ManagedPipelineHandler" /> </handlers>
IISsystem.webServerhandlers处理程序映射Web.config修改时间:2026-07-14 09:45:29