描述三個(gè)C#對(duì)象的使用
本文介紹HttpModule,HttpHandler,HttpHandlerFactory簡(jiǎn)單使用,這三個(gè)C#對(duì)象的使用我們?cè)陂_(kāi)發(fā)ASP.NET程序時(shí)經(jīng)常會(huì)用到,似乎很熟悉,但有時(shí)候又不太確定。本文通過(guò)一個(gè)簡(jiǎn)單的例子來(lái)直觀的比較一下這三個(gè)C#對(duì)象的使用。
◆HttpModule:Http模塊,可以在頁(yè)面處理前后、應(yīng)用程序初始化、出錯(cuò)等時(shí)候加入自己的事件處理程序
◆HttpHandler:Http處理程序,處理頁(yè)面請(qǐng)求
◆HttpHandlerFactory:用來(lái)創(chuàng)建Http處理程序,創(chuàng)建的同時(shí)可以附加自己的事件處理程序
例子很簡(jiǎn)單,就是在每個(gè)頁(yè)面的頭部加入一個(gè)版權(quán)聲明。
一、HttpModule
這個(gè)對(duì)象我們經(jīng)常用來(lái)進(jìn)行統(tǒng)一的權(quán)限判斷、日志等處理。
例子代碼:
- publicclassMyModule:IHttpModule
- {
- publicvoidInit(HttpApplicationapplication)
- {
- application.BeginRequest+=newEventHandler(application_BeginRequest);
- }
- voidapplication_BeginRequest(objectsender,EventArgse)
- {
- ((HttpApplication)sender).Response.Write("Copyright@Gspring<br/>");
- }
- publicvoidDispose()
- {
- }
- }
在Init方法中可以注冊(cè)很多application的事件,我們的例子就是在開(kāi)始請(qǐng)求的時(shí)候加入自己的代碼,將版權(quán)聲明加到頁(yè)面的頭部
二、HttpHandler
這個(gè)對(duì)象經(jīng)常用來(lái)加入特殊的后綴所對(duì)應(yīng)的處理程序,比如可以限制.doc的文件只能給某個(gè)權(quán)限的人訪問(wèn)。
Asp.Net中的Page類就是一個(gè)IHttpHandler的實(shí)現(xiàn)
例子代碼:
- publicclassMyHandler:IHttpHandler
- {
- publicvoidProcessRequest(HttpContextctx)
- {
- ctx.Response.Write("Copyright@Gspring<br/>");
- }
- publicboolIsReusable
- {
- get{returntrue;}
- }
- }
這個(gè)對(duì)象主要就是ProcessRequest方法,在這個(gè)方法中輸出版權(quán)信息,但同時(shí)也有一個(gè)問(wèn)題:原來(lái)的頁(yè)面不會(huì)被處理,也就是說(shuō)頁(yè)面中只有版權(quán)聲明了。那么所有的aspx頁(yè)面都不能正常運(yùn)行了
三、HttpHandlerFactory
這個(gè)對(duì)象也可以用來(lái)加入特殊的后綴所對(duì)應(yīng)的處理程序,它的功能比HttpHandler要更加強(qiáng)大,在系統(tǒng)的web.config中就是通過(guò)注冊(cè)HttpHandlerFactory來(lái)實(shí)現(xiàn)aspx頁(yè)面的訪問(wèn)的。
HttpHandlerFactory是HttpHandler的工廠,通過(guò)它來(lái)生成不同的HttpHandler對(duì)象。
- publicclassMyHandlerFactory:IHttpHandlerFactory
- {
- publicIHttpHandlerGetHandler(HttpContextcontext,stringrequestType,
stringurl,stringpathTranslated)- {
- PageHandlerFactoryfactory=(PageHandlerFactory)Activator.
CreateInstance(typeof(PageHandlerFactory),true);- IHttpHandlerhandler=factory.GetHandler
(context,requestType,url,pathTranslated);- //執(zhí)行一些其它操作
- Execute(handler);
- returnhandler;
- }
- privatevoidExecute(IHttpHandlerhandler)
- {
- if(handlerisPage)
- {
- //可以直接對(duì)Page對(duì)象進(jìn)行操作
- ((Page)handler).PreLoad+=newEventHandler(MyHandlerFactory_PreLoad);
- }
- }
- voidMyHandlerFactory_PreLoad(objectsender,EventArgse)
- {
- ((Page)sender).Response.Write("Copyright@Gspring<br/>");
- }
- publicvoidReleaseHandler(IHttpHandlerhandler)
- {
- }
- }
以上介紹三個(gè)C#對(duì)象的使用。
【編輯推薦】