我们编译上面的代码并把它放到webapp虚拟目录的bin目录之中。
第二步
在web.config文件中通过添加下面的文本来注册这个处理程序:
| <httpHandlers> <add verb="*" path="*.15seconds" type="MyHandler.NewHandler,MyHandler"/> </httpHandlers> |
第三步
由于我们已经建立了用于处理新扩展文件的处理程序了,我们还需要把这个扩展名告诉IIS并把它映射到ASP.NET。如果你不执行这个步骤而试图访问Hello.15seconds文件,IIS将简单地返回该文件而不是把它传递给ASP.NET运行时。其结果是该HTTP处理程序不会被调用。
运行Internet服务管理器,右键点击默认Web站点,选择属性,移动到Home目录选项页,并点击配置按钮。应用程序配置对话框弹出来了。点击添加按钮并在可执行字段输入aspnet_isapi.dll文件路径,在扩展字段输入.15seconds。其它字段不用处理;该对话框如下所示:
![]() |
点击确认按钮关闭应用程序配置和默认Web站点属性对话框。
现在我们运行Internet Explorer并输入url:http://localhost/webapp/hello.15seconds,看到的页面如下:
![]() |
HTTP处理程序中的对话状态
维护对话状态是Web应用程序执行的最通常的事务。HTTP处理程序也需要访问这些对话状态。但是HTTP处理程序的默认设置是没有激活对话状态的。为了读取和/或写入状态数据,需要HTTP处理程序实现下面的接口之一:
· IRequiresSessionState
· IReadOnlySessionState.
当HTTP处理程序需要读写对话数据的时候,它必须实现IRequiresSessionState接口。如果它只读取对话数据,实现IReadOnlySessionState接口就可以了。
这两个接口都是标记接口,并没有包含任何方法。因此,如果你希望激活NewHandler处理程序的对话状态,要像下面的代码一样声明NewHandler类:
| public class NewHandler : IHttpHandler, IRequiresSessionState |
HTTP模块
HTTP模块是实现了System.Web.IhttpModule接口的.NET组件。这些组件通过在某些事件中注册自身,把自己插入ASP.NET请求处理管道。当这些事件发生的时候,ASP.NET调用对请求有兴趣的HTTP模块,这样该模块就能处理请求了。
HTTP模块实现了IhttpModule接口的下面一些方法:
| 方法名称 | 描述 |
| Init | 这个方法允许HTTP模块向HttpApplication 对象中的事件注册自己的事件处理程序。 |
| Dispose | 这个方法给予HTTP模块在对象被垃圾收集之前执行清理的机会。 |
HTTP模块可以向System.Web.HttpApplication对象暴露的下面一些方法注册:
| 事件名称 | 描述 |
| AcquireRequestState | 当ASP.NET运行时准备好接收当前HTTP请求的对话状态的时候引发这个事件。 |
| AuthenticateRequest | 当ASP.NET 运行时准备验证用户身份的时候引发这个事件。 |
| AuthorizeRequest | 当ASP.NET运行时准备授权用户访问资源的时候引发这个事件。 |
| BeginRequest | 当ASP.NET运行时接收到新的HTTP请求的时候引发这个事件。 |
| Disposed | 当ASP.NET完成HTTP请求的处理过程时引发这个事件。 |
| EndRequest | 把响应内容发送到客户端之前引发这个事件。 |
| Error | 在处理HTTP请求的过程中出现未处理异常的时候引发这个事件。 |
| PostRequestHandlerExecute | 在HTTP处理程序结束执行的时候引发这个事件。 |
| PreRequestHandlerExecute | 在ASP.NET开始执行HTTP请求的处理程序之前引发这个事件。在这个事件之后,ASP.NET 把该请求转发给适当的HTTP处理程序。 |
| PreSendRequestContent | 在ASP.NET把响应内容发送到客户端之前引发这个事件。这个事件允许我们在内容到达客户端之前改变响应内容。我们可以使用这个事件给页面输出添加用于所有页面的内容。例如通用菜单、头信息或脚信息。 |
| PreSendRequestHeaders | 在ASP.NET把HTTP响应头信息发送给客户端之前引发这个事件。在头信息到达客户端之前,这个事件允许我们改变它的内容。我们可以使用这个事件在头信息中添加cookie和自定义数据。 |
| ReleaseRequestState | 当ASP.NET结束所搜有的请求处理程序执行的时候引发这个事件。 |
| ResolveRequestCache | 我们引发这个事件来决定是否可以使用从输出缓冲返回的内容来结束请求。这依赖于Web应用程序的输出缓冲时怎样设置的。 |






