在你创建自定义的 HTTP 处理器类之后,你就必须把它注册到 Web.config 文件中。这允许 ASP.NET 调用该处理器来服务于你需要该 HTTP 服务器进行处理并且拥有特定文件扩展名的资源请求。
在 Web.config 文件中注册 HTTP 处理器
如果要让 ASP.NET 把请求发送到自定义的 HTTP 处理器,你就必须使用自定义 HTTP 处理器来注册特定的文件扩展名。你可以在应用程序的 Web.config 文件中完成这个任务。
注册 HTTP 处理器
- 编译 HTTP 处理器的 .NET 类并且把结果汇编集复制到应用程序虚拟根目录下的 Bin 目录中,或者把处理器的源代码存放到应用程序的 App_Code 目录中。
关于 HTTP 处理器的范例,请参考:[实践:创建同步 HTTP 处理器]。
- 你可以在应用程序的 Web.config 文件中创建一个 httpHandlers 元素(ASP.NET 设置结构)配置段来注册 HTTP 处理器。
下列代码说明了如何注册一个对资源 SampleHandler.new 的请求产生回应的 HTTP 处理器。该处理器被定义成汇编集 SampleHandlerAssembly 中的 SampleHandler 类。
<configuration> <system.web> <httpHandlers> <add verb="*" path="SampleHandler.new" type="SampleHandler, SampleHandlerAssembly" /> </httpHandlers> <system.web> </configuration>
下列代码把所有对于扩展名是 SampleFileExtension 的文件的 HTTP 请求都映射到自定义 HTTP 处理器类 SampleHandler2 中。在这种情况下的处理器代码应该位于 App_Code 目录中,因此你不需要指定任何汇编集。
<configuration> <system.web> <httpHandlers> <add verb="*" path="*.SampleFileExtension" type="SampleHandler2 " /> </httpHandlers> <system.web> </configuration>
配置 IIS 的 HTTP 处理器扩展
Internet Information Services(IIS)只会把特定文件类型的请求传递给 ASP.NET 的服务。默认时,拥有文件扩展名 .aspx、.ascx、.asmx 和 .ashx 的文件都已经被映射到了 ASP.NET ISAPI 扩展(Aspnet_isapi.dll)中。因此,如果要让 IIS 把自定义的文件扩展名传递给 ASP.NET,你就必须在 IIS 中注册这些扩展名。关于更多信息,请参考:[ASP.NET 应用程序生命周期概览]。
在 IIS 中映射文件扩展名
- 在 Windows 中,打开 Internet Information Services(IIS)Manager。
- 打开本地计算机节点,打开 Web Sites 节点,然后打开 Default Web Site 节点。
- 右击应用程序的名称,然后点击 Properties。
- 点击 Directory 制表页(或者是 IIS 6.0 中的 Virtual Directory 制表页),然后点击 Configuration。
- 在 Mappings 制表页中,点击 Add 并且为你需要 IIS 转发给 ASP.NET 的文件扩展名创建一个新的关联。
提示:点击 Edit 按钮可以查看现有的关联来检测可执行文件所使用的值。
- 如果你需要你的处理器在运行的时候忽略已请求的文件扩展名是否已经存在,那么就可以清除 Verify that file exists 复选框。