这个IHttpHandler,要想到asp.net生命周期 ,想到哪个从你发起请求开始,这个请求通过HttpModule------》IHttpHandler的;

执行HttpModule的一系列事件后然后执行HttpHandler,然后又执行HttpModule的一些事件。

从图中可以看出,你发送的http请求的最后是在HttpHandler中处理的;
HttpModule是一个HTTP请求的“必经之路”
所以在请求还没有到达HttpHandler的时候,可以对这个请求附加一些信息。
或者针对截获的这个HTTP请求信息作一些额外的工作,或者在某些情况下干脆终止满足一些条件的HTTP请求,从而可以起到一个Filter过滤器的作用。
(过滤器???哈?,怎么在我脑海里冒出来:此路是我开,要想从此过,留下买路财)

一个HTTP请求在HttpModule容器的传递过程中,会在某一时刻(ResolveRequestCache事件)将这个HTTP请求传递给HttpHandler容器。在这个事件之后,HttpModule容器会建立一个HttpHandler的入口实例,但是此时并没有将HTTP请求控制权交出,而是继续触发AcquireRequestState事件以及PreRequestHandlerExcute事件。在PreRequestHandlerExcute事件之后,HttpModule窗口就会将控制权暂时交给HttpHandler容器,以便进行真正的HTTP请求处理工作。

而在HttpHandler容器内部会执行ProcessRequest方法来处理HTTP请求。在容器HttpHandler处理完毕整个HTTP请求之后,会将控制权交还给HttpModule,HttpModule则会继续对处理完毕的HTTP请求信息流进行层层的转交动作,直到返回到客户端为止。

例子看原文吧

MyHttpModule代码

 1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Web;
5
6 namespace MyHttpModule
7 {
8 /// <summary>
9 /// 自定义HttpModule;看到这个鬼,就要想到继承IHttpModule接口和在config中配置信息
///注意标红的这三个方法:请求信息先进入到Init初始化的方法里,然后进入
10 /// </summary>
11 public class MyHttpModule : IHttpModule
12 {
13 public void Dispose()
14 {
15 throw new NotImplementedException();
16 }
17
18 public void Init(HttpApplication context)
19 {
20 context.BeginRequest += context_BeginRequest;
21 context.EndRequest += context_EndRequest;
22 }
23
24 void context_EndRequest(object sender, EventArgs e)
25 {
26 HttpApplication app = sender as HttpApplication;
27 if (app != null)
28 {
29 HttpContext context = app.Context;
30 HttpResponse response = app.Response;
31 response.Write("自定义HttpModule中的EndRequest");
32
33 }
34 }
35
36 void context_BeginRequest(object sender, EventArgs e)
37 {
38 HttpApplication app = sender as HttpApplication;
39 if (app != null)
40 {
41 HttpContext context = app.Context;
42 HttpResponse response = app.Response;
43 response.Write("自定义HttpModule中的BeginRequest");
44
45 }
46 }
47 }
48 }

在web.config注册自定义的HttpModule

 1 <?xml version="1.0" encoding="utf-8"?>
2 <!--
3 For more information on how to configure your ASP.NET application, please visit
4 http://go.microsoft.com/fwlink/?LinkId=169433
5 -->
6 <configuration>
7 <system.web>
8 <compilation debug="true" targetFramework="4.5" />
9 <httpRuntime targetFramework="4.5" />
10
11 </system.web>
12 <system.webServer>
13 <modules>
14 <add name="MyHttpModule" type="MyHttpModule.MyHttpModule,MyHttpModule"/>
15 </modules>
16 </system.webServer>
17 </configuration>

浏览页面Default.aspx

IHttpHandler的学习(0-2)的更多相关文章

  1. IHttpHandler的学习(0)

    本片文章转自网络 问题1:什么是HttpHandler?(Handler:处理者:那就是对Http请求的处理拉) 问题2:什么是HttpModule? 问题3:什么时候应该使用HttpHandler什 ...

  2. axel源码学习(0)——程序逻辑

    axel简介 axel是一个命令行下的轻量级http/ftp 下载加速工具,支持多线程下载和断点续传,支持从多个镜像下载同一文件. axel的用法如下: 图 0.1 axel usage axel 粗 ...

  3. 基于stm32f103zet6的FAT16文件系统学习0(读SD卡扇区)

    SD卡已经看了两天了,主要是因为测试出来的卡容量不对,所以一直找原因,最终还是发现了,总比不过是单位上面出现了问题,或许是之前没有接触到SD的缘故吧,所以对其中的一些寄存器很不了解,一切都是重新开始, ...

  4. python入门学习0

    Python 是什么类型的语言 Python是脚本语言 Python下载地址:https://www.python.org/downloads/ Python版本:Python 3.4.2 - 64b ...

  5. redis初步学习 0

    2.1 Redis是什么 REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统.Redis提供了一些丰富的数据 ...

  6. IHttpHandler的学习(1)

    IHttpHandler的那些事 今晚看了一晚上的IHttpHAndler的知识, 在自定义了Httphandler后,在配置webconfig里配置也是个技术活,什么集成模式,什么asp管道什么的: ...

  7. Hibernate学习0.Hibernate入门

    Hibernate是什么 面向java环境的对象/关系数据库映射工具. 1.开源的持久层框架. 2.ORM(Object/Relational Mapping)映射工具,建立面向对象的域模型和关系数据 ...

  8. Rust 学习 0

    安装Rust 后,本地有文档: file:///usr/local/share/doc/rust/html/index.html file:///usr/local/share/doc/rust/ht ...

  9. 2015第9周三html5学习0

    ​  之前规划了2015关注的技术方向是html5和node.js,虽然前面也搜集过html5相关的评论介绍性能容,但对如何学习和有哪些可利用要经常的看的资源有明显的界定,刚上网搜索了半个多小时,对结 ...

随机推荐

  1. WebView简介(加速加载篇)

    从Android 3.0开始,Android的2D渲染管线可以更好的支持硬件加速.硬件加速使用GPU进行View上的绘制操作. 硬件加速可以在一下四个级别开启或关闭: Application Acti ...

  2. php设计模式之责任链模式

    php设计模式之责任链模式 实际问题 你的论坛有举报功能,版主能解决粗口方面的举报,警察能解决严重一点的黄赌毒方面的举报,更严重的反政府的举报就需要由国安局来完成. 职场中每个人都有直属的上级,如果到 ...

  3. 新版Eclipse找不到Java EE Module Dependencies选项

    在 Eclipse Galileo (3.5) 版本或Ganymede (3.4) 等更老的版本中, 你可以使用Java EE Module Dependencies 选项来组织你的项目结构,确保依赖 ...

  4. avalon 双工绑定以及一个按钮多个事件

    <html xmlns="http://www.w3.org/1999/xhtml"><head runat="server">    ...

  5. LastIndexOf干什么用的

    LastIndexOf的作用是对字符串进行从后往前的检索,找到第一个匹配的位置.比如对字符串“abcdbcd”执行lastindexof("bc")操作,得到的结果是4:4是从前往 ...

  6. SQL 中多个 and or 的组合运算

    sql关系型运算符优先级高到低为:not >and> or AND.OR运算符的组合使用 在WHERE子句中,通过AND.OR运算符可以同时连接多个条件,当然AND.OR运算符也可以同时使 ...

  7. Servicification

    Servicification Summary The Chromium codebase now supports many platforms and use cases. In response ...

  8. 查看Linux 服务器是 32位还是64位的

    查看Linux 服务器是 32位还是64位的 getconf LONG_BIT 返回 64 代表就是 64位的: 返回 32 代表就是 32位的:

  9. redis数据库服务器开启的三种方式

    redis的启动方式1.直接启动  进入redis根目录,执行命令:  #加上‘&’号使redis以后台程序方式运行 1 ./redis-server & 2.通过指定配置文件启动  ...

  10. 【BZOJ4826】【HNOI2017】影魔

    题意: Description 影魔,奈文摩尔,据说有着一个诗人的灵魂.事实上,他吞噬的诗人灵魂早已成千上万.千百年来,他收集了各式各样的灵魂,包括诗人.牧师.帝王.乞丐.奴隶.罪人,当然,还有英雄. ...