IHttpHandler的学习(0-2)
这个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 MyHttpModule7 {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 visit4 http://go.microsoft.com/fwlink/?LinkId=1694335 -->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
转载于:https://www.cnblogs.com/ZkbFighting/p/9022362.html
IHttpHandler的学习(0-2)相关推荐
- 【逆强化学习-0】Introduction
文章目录 专栏传送门 0.引言 1.逆强化学习发展历程 2.需要准备的 专栏传送门 0.简介 1.学徒学习 2.最大熵学习 0.引言 \qquad相比于深度学习,国内强化学习的教程并不是特别多,而相比 ...
- [PyQt] MCV模式学习-0
MCV模式学习-0 目的 item-based模式 0.0 QStringListModel 0.1 QAbstractListModel 0.2 目的 之前的PyQt采用的是item based形式 ...
- IHttpHandler的学习(0)
本片文章转自网络 问题1:什么是HttpHandler?(Handler:处理者:那就是对Http请求的处理拉) 问题2:什么是HttpModule? 问题3:什么时候应该使用HttpHandler什 ...
- 华为弹性云服务器ECS使用学习0
学习大纲 ECS概述 组成:CPU,内存,镜像,操作系统,云硬盘 ECS产品优势 弹性伸缩AS(弹性可扩展) ECS产品架构 Region:地理位置和网络时延的划分,同一个Region中共享计算和存储 ...
- 编程语言学习——0基础C语言入门
自我介绍 我是一名即将升入大三的计算机科学与技术专业的学生,这是我第一次在CSDN上发表文章,在平时写代码时我会经常遇到许许多多的问题,所以在这个假期中我想不断地充实自己,让自己的专业知识基础更加牢固 ...
- Python学习0——基础知识1
复习一下:Python基础知识学习 菜鸟教程:Python3 基础语法 | 菜鸟教程 (runoob.com) 一.数据类型 1.Number(数字) (1)数字类型 Python包括4种数字类型:i ...
- CUDA编程学习0——环境搭建环境详解
目录 环境配置 软件安装 1.支持最高的cuda版本查询,下载cuda开发软件: 3.配置环境(~/.bashrc添加环境变量) 4.后续维护查询 补:关于windows下的cuda环境配置 一.Vi ...
- GIT学习0基础到入门(附图)
GIT学习 1.git 常用命令代码 提交,或者修改代码到暂存区 git add 2.设置签名 git config user.name JackMa git config user.email 13 ...
- Hadoop基础学习0
20161209 10:43--12:00 Hadoop,The Apache™ Hadoop® project develops open-source software for reliable, ...
最新文章
- TransDecoder
- ThinkPHP 数据库操作之数据表模型和基础模型 ( Model )
- springboot配置热部署
- MD5计算,一个扩展类,哪里都能用
- 发布 ASP.NET Core 应用
- NYOJ-疯牛(贪心)
- JAVA连接SQL server
- 精通Spring Boot——第三篇:详解WebMvcConfigurer接口
- leecode---40---数组,dfs---求所有的组合为target,有重复数组
- PSCC2014前端切图小方法(不断补充)
- C语言编写几何平均数的函数,Excel 计算几何平均值:GEOMEAN函数
- CH552-HID 键盘 鼠标
- 物联网卡与普通的sim卡的区别
- 题解 CF133A 【HQ9+】
- ts中any 、unKnown的区别
- 模糊查询下划线“_”时查询的是全部数据
- 解决oracle数据库的表中存在异常日期值在查询时抛出ora-01841错误的办法
- 0359-模型训练和部署-Iris数据集
- 我,大二实习,996,月工资800
- WPF学习之资源-Resources