【ASP.NET】IHttpHandler和IHttpModule
上篇文章我们主要讲了HttpApplicatiion管道事件,那么我么如何处理这些管道事件呢,以及请求在ASP.NET是如何执行的呢,我们来了解一下IHttpHandler和IHttpModule
引言:
处理HttpApplicatiion事件
HttpApplication提供了基于事件的扩展机制,允许程序员借助于处理管道中的事件进行处理过程扩展。由于HttpApplication对象是ASP.NET基础架构来创建和维护,那么如何才能获得这个对象引用,以便于注册HttpApplication对象的事件处理,在ASP.NET中提供了两种方式来 解决这个问题:IHttpModule和global.aspx,这两种方式的核心都是IHttpModule几口,下面我们就主要讲IHttpModule。
正文:
IHttpModule的用途以及用法
在ASP.NET中,定义在System.Web命名空间下的IHttpModule接口专门用了定义HttpApplication对象的事件处理。
实现IHttpModule接口的类成为HttpModule。IHttpModule接口的定义如下,仅仅包含两个成员:
public interface IHttpModule
{
void Dispose()
void Init(HttpApplication context)
}
其中,Dispose方法用于回收Module所使用的非托管资源,如果没有的话,直接返回即可。
最重要的是第二个方法Init,可以看到这个方法接受一个HttpApplication类型的参数,在ASP.NET中,每当创建一个HttpApplication对象实例,将遍历注册的HttpModule类型,通过反射依次创建 么个注册HttpModule类型的一个实例对象,并将这个HttpApplication实例通过Init方法传递给各个HttpModule,这样HttpModule对象就可以在第一时间完成针对HttpApplication对象的事件注册了。
例如,希望写一个PostAuthenticateRequest事件的HttpModule,那么就可以完成以下注册
pulic class xxx:IHttpModule
{
void Dispose()
void Init(HttpApplication app)
{
app.PostAuthencateRequest+=new EventHandler(app_PostAuthencateRequest)
}
}
当然,实现IHttpModule接口只是实现HttpModule的一部分,在ASP.NET中所使用的HttpModule还要在网站配置文件中进行注册才能真正生效,并在ASP.NET中使用,这一点我们就不在讲解了,下面看一下IHttpHandler。
IHttpHandler
在ASP.NET中,请求的真正处理就是在处理程序这个环节,也就是在HttpApplication19个标准事件的PreRequestHandlerExcute和PostRequestHandlerExcute之间,PreRequestHandlerExcute负责同志程序员,处理程序就要开始工作了,PostRequestHandlerExcute事件同志程序员ASP.NET服务器的处理程序已经完成。那么HttpApplication的作用是什么呢?我们可以把它看做请求到达处理程序和离开处理程序的一个管道,这个管道提供了统一处理所有请求的机制,使得我们可以在请求被真正处理之前和处理之后进行预处理和处理后的工作。
处理程序负责完成实际的请求处理工作,对于网站开发人员来说,大多数的开发工作是围绕着处理程序展开的。(其实我们可以看到,我们的页面类也就是Page实现了IHttphandler接口)实际上,接触到HttpApplication事件处理的时候并不多,处理程序在不同的网站开发技术中有不同的名字,在ASP.NET中,为HttpHandler。
在ASP.NET中,所有的处理程序类必须实现IHttpHandler接口或者实现IHttpAsyncHandler接口,我们可以很明显看出区别来,一个是同步接口,一个是异步处理模式的接口。那么我们通常使用的是同步模式的接口。下面我们简单介绍一下
这两个接口都定义在System.Web下,IHttphandler接口的定义如下
public interface IHttpHandler
{
void ProcessRequest(HttpContext context)
bool IsRequest{get;}
}
ProcessRequest是这个接口的主要方法,接收一个HttpContext类型的请求上下文对象,通过这个对象,处理程序可以得到关于处理请求所需的信息,通过这个参数的Response属性可以得到管理回应的对象,可以向客户端返回服务器的处理结果。
IsRequest属性表示当这个处理程序对象在使用之后,是否还可以被缓存起来,在以后的请求处理中用。
当然,同样的是我们也要注册处理程序,每一种处理处理程序用来处理一类的请求,处理程序与请求之间的匹配关系可以在网站的配置文件中通过配置参数来进行设置。
【ASP.NET】IHttpHandler和IHttpModule的更多相关文章
- 如何将IHttpHandler和IHttpModule迁移到ASP.NET Core中间件
ASP.NET Core是一个跨平台.开源的框架,用于在Windows.Mac和Linux操作系统(OS)上开发web应用程序.你可以使用以下任何IDE开发ASP.NET Core 应用程序: Vis ...
- Asp.Net IHttpHandler介绍
ASP.NET响应Http请求时常用的两个处理接口是IHttpHandler和IHttpModule. 一般的,IHttpHandler用来处理一类特定的请求,比如对每个*.asp, *.aspx文件 ...
- ASP.NET中IHttpHandler与IHttpModule的区别(带样例说明)
IHttpModule相对来说,是一个网页的添加 IHttpHandler相对来说,却是网页的替换 先建一个HandlerDemo的类 using System; using System.Colle ...
- HTTP请求处理流程、IHttphandler、IHttpModule
一.ASP.NET处理管道 Asp.net处理管道的第一步是创建HttpWorkerRequest对象,它包含于当前请求有关的所有信息. HttpWorkerRequest把请求传递给HttpRunt ...
- 【IHttpHandler】IHttpModule实现URL重写
1.用自定义IHttpModule实现URL重写 一般来说,要显示一些动态数据总是采用带参数的方式,比如制作一个UserInfo.aspx的动态页面用于显示系统的UserInfo这个用户信息表的数据, ...
- asp.net IHttpHandler浅析
在asp.net程序中,我们可以通过配置url的path路径的方式,将某个path路径下的请求交给指定的IHttpHandler去处理,这便是对request请求进行编程. 一.新建一个framewo ...
- 转之农民伯伯 IHttpHandler中使用Session实现原理[ASP.NET | IHttpHandler |IRequiresSessionState]
前言 在实现自己的Handler的时候只需要继承IHttpHandler接口就行了,在Handler中使用Session时,只需要继承一下IRequiresSessionState就行了,到底为什么只 ...
- Sample ASP.NET IHttpHandler
LoggerHandler.cs using System; using System.Collections.Generic; using System.Diagnostics; using Sys ...
- ASP.NET运作流程
当我们在浏览器输入域名访问服务器资源时,会向服务器发送Http请求,并经由IIS处理后,交由ASP.NET托管程序处理,进入ASP.NET管道.在IIS内部如何处理我们不需要深入去了解,在ASP.NE ...
随机推荐
- HDU1114 背包
Piggy-Bank Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- X210串口配置与stdio移植
串口控制器初始化关键步骤 (1)初始化串口的Tx和Rx引脚所对应的GPIO(查原理图可知Rx和Rx分别对应GPA0_1和GPA0_0) (2)GPA0CON(0xE0200000),bit[3:0] ...
- 【c#】winform 上传图片
1.拖拽上传图片 1.1.后台代码中修改窗体属性,添加 AllowDrop = true 1.2.给窗体添加拖拽事件,在事件列表找到拖拽 双击即可: 在 DragDrop 生成的方法中添加代码如下: ...
- aio 爬虫,去重,入库
#aio 爬虫,去重,入库 import asyncio import aiohttp import aiomysql import re from pyquery import PyQuery st ...
- Flask中路由原理
在Flask内部使用两张表维护路由: url_map :维护URL规则和endpoint的映射 view_functions :维护endpoint和视图函数的映射. 以用户访问URL/home为例, ...
- Asp.net Web Api 2 FORM Authentication Demo
最近看了一点 web api 2方面的书,对认证都是简单介绍了下,所以我在这里做个简单Demo,本文主要是FORM Authentication,顺带把基本认证也讲了. Demo 一.FORM Aut ...
- bzoj 3126: [Usaco2013 Open]Photo——单调队列优化dp
Description 给你一个n长度的数轴和m个区间,每个区间里有且仅有一个点,问能有多少个点 Input * Line 1: Two integers N and M. * Lines 2..M+ ...
- Spring归纳小结(山东数漫江湖)
前言 如果说有什么框架是Java程序员必然会学习.使用到的,那么Spring肯定是其中之一.本篇博客,将根据博主在日常工作中对Spring的使用做一个系统的归纳小结. Spring的一些概念和思想 S ...
- Python3 面向对象编程高级语法
1.静态方法: #!/usr/bin/env python # _*_ coding:utf-8 _*_ # Author:CarsonLi class Dog(object): def __init ...
- mysql之安装和配置(一)
环境 oracle linux7.3 数据库:MySQL-5.7.20 mysql的安装 先安装依赖的插件 yum install libaio 去官网下载mysql-5.7.20的tar.gz包: ...