ASP.NET底层处理机制HttpModule和HttpHandler的应用

ASP.NET底层处理机制HttpModule和HttpHandler的应用


2024年6月2日发(作者:)

总第274期 

2012年第8期 

计算机与数字工程 

Computer&Digital Engineering 

Vo1.40 No.8 

155 

ASP.NET底层处理机制HttpModule和HttpHandler的应用 

白林如张红琴 

平顶山467099) (河南质量工程职业学院

摘要文章介绍了ASP.NET处理HTTP请求的过程,通过实现验证用户Session和为图片添加数字水印的实例说明了在ASP 

ASP.NET;HTTP请求;HttpModule;HttpHandler;Web应用扩展 

TP393 

NET请求处理过程中加入自定义的HttpModule和HttpHandler来扩展Web应用的一般方法。 

关键词

中图分类号

ASP.NET Underlying Mechanism for Handling Http Module and 

HttpHandler Application 

BAI Linru ZHANG Hongqin 

(Henan Quality Polytechnic,Pingdingshan 467099) 

Abstract This article describes the process of ASP.NET to handle HTTP requests,the request handling process by adding a custom 

HttpModule and HttpHandler to extend the web application in ASP.NET through the realization of the instance to validate the user Session 

and add a digital watermark to the picture. 

Key Words ASP.NET,HTTP request,HttpModule,HttpHandler。web applications 

Class Number TP393 

1 引言 

ASP.NET是.NET Framework的核心组件之一,是功 

状态管理、集成Windows身份验证、判断用户是否被授权 

访问某一资源、捕捉异常等。如果打开C:\WINIX)WS\ 

Microsoft.NET\Framework\v4.0.30319\Config\web. 

能强大的构建Web应用的平台。ASP.NET中的web— config文件,在<httpModules></httpModules>和<ht 

tpHandlers></httpHandlers>配置节中可看到系统已注 

册的httpModule和httpHandler。 

Forms和WebServices等这些高层次的实现,使得构建 

Web程序变得非常容易。然而ASP.NET的优势并不仅仅 

是它的易用性,在较低的层次上,ASP.NET也提供了足够 同时,.NET也提供了由用户开发自定义的HttpHan— 

dler和HttpModule的功能,使用自定义的HttpHandler和 

HttpModule这些低层处理机制可以截取HTTP请求,在 

请求处理过程中获得更多的控制权,使应用程序具有更好 

的性能[3]。 

多的可扩展性和灵活性_1]。ASP.NET的H,rrP请求处理 

HTTP请求 

Modulel 

过程是基于管道模型的,请求 

处理过程要经过管道中多个被 

称为HttpModule的不同程序 

Module2 

Module3 

集,然后再传递到请求处理中 

心由唯一的处理程序Ht— 

tpHandler对请求进行处理,并 

将处理过后的结果附加在HT— 

2 HttpModule 

在ASP.NET中,HttpModule是实现了IHttpModule 

接口的程序集,是HWI'P请求处理前和处理后的“必经之 

路”,无论客户端请求的是什么文件,都会调用到它。因此, 

可以根据编程的实际需要,自定义实现各种功能的Http— 

Module。 

HttpHandler 

TP请求信息流中,再次经过多 

个HttpModule,返回给客户 

图1 AsP・NETHTTP 端 

图1表示了ASP.NET 

请求处理过程 处理HTTP请求的内部过程

。 

在ASP.NET Framework中,声明IHttpModule接口 

的代码如下: 

fmblic interface IHttpModule 

在进行程序设计时,可以通过HttpModule和Ht— 

tpHandler来截取请求处理过程中触发的各种事件,对请求 

进行验证、修改、过滤以及处理等。 

{ 

void Init(HttpApplication context); 

void Dispose(); 

ASP.NET系统本身配置有很多HttpModule和Ht— 

tpHandler,用来处理aspx等.NET标准的页面文件以及这 

些页面文件中标准的事件等,包括页面级输出缓存、Session 

} 

*收稿日期:2012年2月17日,修回日期:2012年3月29日 

作者简介:白林如,男,硕士,讲师,研究方向:软件工程。张红琴,女,硕士,讲师,研究方向:计算机网络。 

156 白林如等:ASP.NET底层处理机制HttpModule和HttpHandler的应用 第40卷 

IhttpModule接口包括Init()7y法和Dispose()方法,自定 

义HttpModule,也即实现IhttpModule接口,编写接【__=I中的两 

个方法。HTI'P请求处理过程会触发一系列的事件,在Iht— 

tpModule接口的Ink()7y法中,可以截取某事件,添加事件处 

理代码,对HTTP请求进行验证、修改、过滤等l4]。 

自定义HttpModule可以使一些复杂的问题简单化,例 

如在编程时往往只是在用户登录界面通过用户名、密码、甚 

至验证码等对用户进行验证,用户通过验证才能进入目标 

页面,总以为很安全了,殊不知用户直接在地址栏中输入目 

标页面的URI 也可登录,使一些重要信息在网络上被收 

录。常用的解决办法是登录成功后用Session记录用户信 

息,在其它每一个页面的Page—Load事件中都检查保存用 

户信息的Session是否存在,如果不存在则只能跳转到用户 

登录页面。但这种判断是页面级的,需要在每个页面重复 

添加相同的代码,增加了编码的工作量,而且给程序的维护 

带来了很大的麻烦。而使用自定义HttpModule则可使问 

题简单化,下面通过实现用户验证功能的实例来说明在 

ASP.NET请求处理过程中加入自定义的HttpModule来 

扩展Web应用的一般方法l[]。 

1)新建网站,添加用户登录页面Login.aspx和可相互 

切换的页面Page1.aspx、Page2.aspx。功能为用户通过Lo 

gin.aspx页面登录成功,保存Session[“user”],进入Page1. 

aspx页面。 

2)在AppCode文件夹中创建实现IHttpModule接口 

的类AuthenticModule.es。虽然在ASP.NET的请求处理 

过程中会触发一系列的事件,但由于用户验证要用到Ses— 

sion,而且只有AcquireRequeststate事件和PreRequest— 

Hand1erExecute事件可以访问Session,所以选择在PreRe— 

questHandlerExecute事件中判断请求的页面以及对页面进 

行过滤处理。类AuthemicModule的代码如下: 

public class AuthenticModule:IHttpModule 

{ 

public void Dispose() 

{ 

)public void Init(HttpApplication context) 

context.PreRequestHandlerExeeute+一new EventHandler 

(context

PreRequestHandlerExecute); 

7 

void context

PreRequestHandlerExecute(object sender,Even— 

tArgs e) 

{ 

//根据该事件处理方法的参数获得发生该事件的对象 

HttpApplication application=(HttpApplication)sender; 

//获得请求的url路径 

string path=application.Context.Request.Ur1.ToString(); 

int m—path.1ndexOf(”aspx”); 

int n—path.IndexOf(”Login.aspx”); 

//如果是aspx页面而且不是登陆页面 

if(m>0 &n一一1) 

{ 

//如果SessionE”user”]一=null 

if(application.Context.SessionE”user”]一=nul1) 

//Nt转到Login.aspx页面 

application.Response.Redirect(”I.ogin.aspx”); 

f 

} 

3)在web.config中注册自定义的HttpModule。代码 

如下: 

<system.web ̄> 

<(compilation debug一”true”targetFramework=”4.0”/> 

(httpModules ̄ 

<add name_-”AuthenticModulc”type一”AuthenticModule. 

App Code”/> 

%/httpModuleK> 

 ̄/system.web> 

其中type属性由分号“,”分为两部分,前面是创建的 

实现IHttpModule接口的类的名称;后面是程序集名。在 

本例中,实现IHttpModule接口的类AuthenticModule在 

App

Code目录中,也可以不指定程序集名,如type一”Au— 

thenticModule”。 

4)测试 

当用户从Login.aspx页面登录,保存SessionE“user”], 

可进入TestPage1.aspx页面,并可从TestPage1.aspx页面进 

入PestPage2.aspx页面;而进入TestPage1.aspx页面后使用 

eSssioI ̄Abandon()语句清除Session或登录前直接从在URL 

地址栏里输入TestPage2.aspx页面的URL都不能进人 

TestPage2.aspx页面。因为对任一页面的请求,在页面周期 

中将触发PreRequestHandlerExecute事件,Asp.Net创建在 

web.config中注册过的AuthenticModule实例,并调用Authe 

nticModule的Init()方法进行判断,如果SessionE“user”]为 

null时,用户只能进入LogirL aspx页面。 

AuthenticModule实现了过滤请求的功能,无需在每个 

页面都写相同的验证代码,这样的验证方式是简单的、安全 

的,而且给代码的维护带来了方便。 

3 HttpHandler 

HttpHandler是实现了IhttpHandler接口的处理程序, 

是HTTP请求的真正处理中心,ASP.NET Framework已 

经定义了IhttpHandler接口,其成员包括void ProccssRe— 

quest(HttpContext httpContext)方法和bool IsReuseable 

{get;}属性。其中ProcessRequest(HttpContext httpCon— 

text)方法是IHttpHandler接口的核心,该方法需要一个 

HttpContext也称为Http上下文类型的参数。参数中封装 

了单个HTTP请求的所有HTTP特定信息,可以通过它访 

问Request、Response、Server和Session等ASP.NET重要 

对象L 。当一个HTTP请求传递到HttpHandler的时候, 

ASP.NET Framework会调用HttpHandler的ProcessRe— 

quest(HttpContext httpContext)方法来对该请求做真正的 

处理[。~ 。 

ASP.NET Framework提供了默认的实现IhttpHan 

dler接口的类,这个类就是Page类,因此在使用ASP.NET 

开发Web应用时,并非要求开发者一定要实现IHttpHan— 

dler接口。例如在网站中新建WebForml页面,自动生成 

2012年第8期 计算机与数字工程 l57 

的扩展名为.aspx.cs的文件中包含如下代码: 

public class WebForml:System.Web.UI.Page{……}; 

即该页面继承System.Web.UI.Page类,而Page类又 

实现了IhttpHandler接口,是ASP.NET提供的默认Ht— 

tpHandler,当用户发出请求时,可以在HTTP请求处理流 

水线上调用HttpHandler,形成应答信息返回给用户,实现 

动态Web页面。 

虽然ASP.NET隐含地实现了IHttpHandler接口,提 

供了一些标准的HttpHandler来处理不同的HTTP请求, 

满足开发Web应用的基本需要,但这些处理模式是固定 

的,可能有不尽人意的地方。在某些情况下,如果需要对用 

户的某些H1vrP请求进行特殊的处理,可以采用自定义 

HttpHandler的方式来实现l8]。 

例如,在做网站时经常需要将图片加上水印来保护图 

片的版权。如果利用图片处理软件来一个一个添加水印工 

作量是非常大的,而且修改了之后就没法还原。而通过自 

定义HttpHandler则很容易实现,下面通过为图片添加数 

字水印的实例说明自定义HttpHandler的方法。 

自定义HttpHandler,必须实现IHttpHandler接口,编 

写接口中的ProcessRequest()方法,同时在网站的web. 

config进行注册,步骤如下: 

昏鞭搿 

_ l§ 

l 

1 1

1)新建网站,使用图 

搿 

 I》 

≈ 

gI 

一 0 《 0 

像处理软件PhotoShop制 

lI l :÷ I l

作扩展名为. 的背景透 

明的水印图片Watermark. 

l二 

0 

~ ll 

麓 

j 

酣,如图2所示,并保存在 

网站的Images文件夹中; 

图2水印图片Watermark.gif 把网站中需要添加水印的 

图片保存在网站中的Images/Loadlmages/文件夹中。 

2)在Default.aspx页面添加Image控件,设置其Ima— 

geUrl属性为Images/LoadImages/文件夹中的任一张图片。 

3)在网站的App_Code文件夹中创建实现IHttpHandler 

接口的类CustomlrnageHandler。在类中需要实现ProeessRe— 

quest(HttpContext httpContext)方法,根据httpContext参数 

获取加载的图片imgLode;根据保存路径实例化水印图片 

imgWatermark;将要加载的图片作为参数定义画布my— 

Graphics;将水印图片绘制到画布上,实现对水印图片的拉 

伸,以适应不同大小和不同长宽比的图片,myGraphics. 

DrawIrnage(irngWaterrnark,new Rectangle(O,0,imgLod ̄ 

Width,irnglxxt ̄Height));绘制水印后通过Dispose()方法释 

放画布和水印图片;将图片存入输出流等。在类中还要实现 

接口成员IsReusable[ 。类代码如下: 

using System; 

using System.Web; 

using System.Drawing; 

public class CustomlmageHandler:IHttpHandler 

{ 

public void ProcessRequest(HttpContext httpContext) 

Image imgLode=null; 

if(System.IO.File.Exists(httpContext.Request.Physi— 

calPath)) 

imgLode—Image.FromFile(httpContext.Request. 

PhysicalPath); 

Image imgWatermark—Image.FromFile(httpCon— 

text.Request.MapPath(” /Images/Watermark.gif”)); 

Graphics myGraphics—Graphics.FromImage(im 

gLode); 

myGraphics.DrawImage(imgWatermark,new Rec— 

tangle(0,0,imgLode.Width,imgLode.Height)); 

myGraphics.Dispose(); 

imgWatermark.Dispose(); 

imgLode.Save(httpContext.Response.OutputStream,Sys— 

tern.Drawing.Imaging.ImageFormat.Jpeg); 

imgLode.Dispose(); 

httpContext.Response.End(); 

) 

} 

//实现接口成员.IsReusable 

public bool IsReusable 

{ 

get{return false;) 

) 

4)为了能使用这个自定CustomlmageHandler捕获对 

图片的访问请求并进行处理,需要在网站的web.config进 

行注册。 

<system.web> 

<httpHandlers> 

<add verb=’’*”path=”Images/Loadlmages/*.JPg” 

type一”CustomImageHandler”/> 

</httpHandlers> 

</system.web> 

代码中verb是逗号分隔的Http谓词列表(例如: 

GET、PUT、POST”),verb=”*”表示所有请求;path是访 

问路径;type指定逗号分隔的类或程序集组合。<ht— 

tpHandlers></httpHandlers>配置节中的代码表示凡是 

访问Images/LoadImages/文件夹中.jpg文件的请求都将执 

行CustomlmageHandler中的代码 ]。 

5)测试 

一 启DC行添图

片,

eu处f片s加at

如图3所示。

uo理l的m了t.H动,a数在st浏p1字x页vH览r水Pa面n器请d印

 

看l,e求r进加到的入载进是由图 

图3添加了数字水印的图片 对图片进行“复制” 

或“另存为”操作得到的图片也包括水印,而在网站Images/ 

Loadlmages/文件夹中保存的图片并没有被修改。 

4 结语 

ASP.NET的底层处理机制HttpModule和HttpHan— 

dler具有良好的可扩展性。在Web应用的开发过程中,可 

针对用户请求的任何一类文件来实现定制的HttpModule 

和HttpHandler,以决定如何过滤和处理用户的请求,这种 

l58 白林如等:ASP.NET底层处理机制HttpModule和HttpHandler的应用 第4O卷 

编程方式为web应用开发带来了很大的灵活性,不仅可以 

实现更加复杂的功能,同时对提高web应用的安全性和健 

壮性都具有非常重要的意义。 

参考文献 

()} cct Model EJ].Computer Knowledge and Technology,2007(11). 

[6]胡保,王建军,李海燕.ASP.NET的工作原理探索[J].中国西 

部科技,2006,23. 

HU Bao,WANG Jianjun,I I Haiyan.ASP.NET works explo— 

ring_j].Science and Technology of West China,2006,23. 

[1]王涛,杨季文,钱培德.ASP.NET WebForms底层请求处理机 

[7]古权.利用定制的HttpHandlers增强ASP.NET』澎,L}j的力 法 

EJ].电脑知识与技术,2005(5). 

GU Quan.Use of custOFn HttpHandlers enhanced ASP.NET 

制初探[J].计算机应用与软件,2007,10(24). 

WANG Fau,YANG Jiwen,QIAN Peide.ASP.NET WebForms 

underlying request handling mechanism of[J].Computer Ap 

plication and Software,2007,24(10). 

applications[J].Computer knowledge and technology,2005 

(5). 

r2]肖斌,汪敏.基于ASP.NET框架的Web应用研究EJ].通信技 

术。20l1,44(4). 

XIA()Bin。WANG Min.Web applications based on ASP.NET 

E8]董海燕.基于ASP.NET的数字水印图片制作技术研究[1I.电 

脑知识与技术,201l(14). 

D()NG Haiyan.ASP.NET digital watermark image 1)roduction 

framework[J!.Communication Technology,2011,44(4). 

3j杨成果.蒋泽军,E丽芳.基于HTTf 管道的集中式访问控制 

的研究与实现[J].西南民族大学学报,2007(6). 

YANG Chengguo,JIANG Zejun,WAN(}I ifang.Centralized 

technology[J].Computer knowledge and technology,20 I 1 

(14). 

[9]叶文.ASP.NET中动态实现图片水印[J].电脑编程技巧与维 

护,2008(13). 

access control based on the HTTP pipeline[J].Southwest Uni 

versity for Nationalities,2007(6). 

YE Wen.Dynamically in ASP.NET Photo Watermark[J]. 

Computer programming skills and maintenance.2008(13). 

4]史红军.基于HttpModule的页面访问日志[J].科技资讯,2009 

(25). 

[1O]北京阿博泰克北大青鸟信息技术有限公司.开发基于Ajax和 

控件技术的Web应用系统[M].科学技术文献出版社,2011: 

5 26. 

Shi Hongjun.Based on the the HttpModule page access logs 

EJ].Scientific and technological information,2009(25). 

Beijing Aptech Beida Jade Bird Information Technology Co.. 

I td.the development of Web applications based on Ajax and 

L5]江艳萍.深入浅出ASP.NET页面对象模型[j].电脑知识与技 

术,2007(11). 

control technology system[M].Science and Technology I.it 

erature Publishing House,201 1:5 26. 

 .;币{!; 坏 过坏 尔 趟 尔 坏 铈 尔 坏 乖 尔 矫趟}乖 尔 矫 不 

IIAN(;Yanping.In depth and shallow out ASP.NET Page 

出界 尔 j 

(上接第103页) 

明文中重定向算法的正 

确性。综上所述,本文给 

出了一种BVH格式运动 

 i4 Multon Franck,Kulpa Richard,Hoyet I.udovic,Komura ku. 

From Motion capture to real—time character animation[J].Motion 

in(}ames,2008:72 81. 

5 Badler N I,Bechet W M,Webber B I .Simulation and analysis 

捕捉数据在Jack软件中 

重用的转换算法。仿真 

结果表明,这个算法是正 

图6“曲线加速跑步”运动 

在Jack平台中的重定向结果 

of complex human tasks for manufacturing[( ].Proceedings of 

SHE on Modeling,Simulation,and Control Technologies for 

Manufacturing,Philadelphia,1995:225—233. 

确和实用的。该方法实 

现了运动捕捉数据在 

[6]谭正文,薛红军,苏润娥.基于JAcK的民机驾驶舱可视性评 

估研究[J].航空计算技术,2010,40(5):79 81. 

FAN Zhengwen,XUE Hongjun.SU Rune.Research on gist 

Jack平台中的重定向,为进一步改进产品设计以及人素分 

析提供逼真的仿真环境,具有重要的工程意义。 

参考文献 

bility for Cockpit of Civil Aircraft Based on JACK[J].Aeronau 

tica1 Computing Technique,2010,40(5):79—81. 

E7]刘贤梅,李冰,吴琼.基于运动捕获数据的虚拟人动画研究 

lJ].计算机工程与应用,2008,44(8):l13—114. 

LIU Xianmei,I I Bing,WU Qiong.Virtual Htlruan Animation 

[1]高申玉,刘金刚.人体运动实时捕捉设备传输数据的滤波与处 

理lJ].计算机工程与没计,2006,27(15):2715—2773. 

GA()Shenyu.I IU Jingang.Joint Faculty of Computer Scien 

Based on Motion Capture Data[J].Computer Engineering and 

Applications,2008,44(8):113—114. 

tific Research[J].Computer Engineering and Design,2006,27 

(15):27l 5-2773. 

8】Badler.Simulation Humans M.()xford University Press,l993. 

2]沈军行,孙守迁,潘云鹤.从运动捕获数据中提取关键帧lI1]. 

计算机辅助设计与图形学学报,2004,16(5):719-723. 

SHEN J unxing,SUN Shouqian,PAN Yunhe.Key—Frame 

[9]章 为.卫星轨道姿态动力学与控制[M].北京:北京航空航天 

大学出版社,1998. 

ZHANG Renwei.Attitude Dynamics and Control of Satellite 

Extraction from Motion Capture DataEJ].Journal of Computer 

Aided Design and('omputer Graphics,2004,16(5):719-723. 

OrbitEM ̄.Beijing:Beihang University Press,1998. 

[1O]张帆,曹喜滨,邹经湘.一种新的全角度四元数与欧拉角的 

转换算法EJ].南京理工大学学报,2002,26(4):376—380. 

ZHANG Fan,CAO Xibing,ZU Jingxiang.A New Large scale 

L3j卢晓军,李焱, 汉根.基于路径变换的虚拟人行走捕获数据 

的重用[J].系统仿真学报,2005,17:170—173. 

I U Xiaojun。LI Yan,HE Hangen.Reusability of Virtual Hu— 

maffs Walking Motion Capture Data Based on Path Transfor— 

Transformation Algorithm of Quaternion to Euler Angle[J]. 

Journal of Nanjing University of Science and Technology. 

2002。26(4):376 380. 

mationEJ ̄.Journal of System Simulation,2005,17:170 1 73. 


发布者:admin,转转请注明出处:http://www.yc00.com/news/1717338357a2737184.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信