日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

C#强化系列:HttpModule,HttpHandler,HttpHandlerFactory简单使用

發(fā)布時(shí)間:2025/7/14 60 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#强化系列:HttpModule,HttpHandler,HttpHandlerFactory简单使用 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

這三個(gè)對(duì)象我們?cè)陂_發(fā)Asp.net程序時(shí)經(jīng)常會(huì)用到,似乎很熟悉,但有時(shí)候又不太確定。本文通過一個(gè)簡(jiǎn)單的例子來直觀的比較一下這三個(gè)對(duì)象的使用。
HttpModule:Http模塊,可以在頁面處理前后、應(yīng)用程序初始化、出錯(cuò)等時(shí)候加入自己的事件處理程序
HttpHandler:Http處理程序,處理頁面請(qǐng)求
HttpHandlerFactory:用來創(chuàng)建Http處理程序,創(chuàng)建的同時(shí)可以附加自己的事件處理程序

例子很簡(jiǎn)單,就是在每個(gè)頁面的頭部加入一個(gè)版權(quán)聲明。
一、HttpModule
這個(gè)對(duì)象我們經(jīng)常用來進(jìn)行統(tǒng)一的權(quán)限判斷、日志等處理。
例子代碼:

????public?class?MyModule?:?IHttpModule
????{
????????public?void?Init(HttpApplication?application)
????????{
????????????application.BeginRequest?+=?new?EventHandler(application_BeginRequest);
????????}

????????void?application_BeginRequest(object?sender,?EventArgs?e)
????????{
????????????((HttpApplication)sender).Response.Write("Copyright?@Gspring<br/>");
????????}

????????public?void?Dispose()
????????{
????????}
????}

web.config中配置:

??????<httpModules>
????????<add?name="test"?type="HttpHandle.MyModule,?HttpHandle"/>
??????</httpModules>

在Init方法中可以注冊(cè)很多application的事件,我們的例子就是在開始請(qǐng)求的時(shí)候加入自己的代碼,將版權(quán)聲明加到頁面的頭部?

二、HttpHandler

這個(gè)對(duì)象經(jīng)常用來加入特殊的后綴所對(duì)應(yīng)的處理程序,比如可以限制.doc的文件只能給某個(gè)權(quán)限的人訪問。
Asp.Net中的Page類就是一個(gè)IHttpHandler的實(shí)現(xiàn)
例子代碼:

????public?class?MyHandler?:?IHttpHandler
????{
????????public?void?ProcessRequest(HttpContext?ctx)
????????{
????????????ctx.Response.Write("Copyright?@Gspring<br/>");
????????}
????????public?bool?IsReusable
????????{
????????????get?{?return?true;?}
????????}
????}

web.config中配置:

??????<httpHandlers>
??????<add?verb="*"?path="*.aspx"?type="HttpHandle.MyHandler,?HttpHandle"/>
??????</httpHandlers>

這個(gè)對(duì)象主要就是ProcessRequest方法,在這個(gè)方法中輸出版權(quán)信息,但同時(shí)也有一個(gè)問題:原來的頁面不會(huì)被處理,也就是說頁面中只有版權(quán)聲明了。那么所有的aspx頁面都不能正常運(yùn)行了

三、HttpHandlerFactory

這個(gè)對(duì)象也可以用來加入特殊的后綴所對(duì)應(yīng)的處理程序,它的功能比HttpHandler要更加強(qiáng)大,在系統(tǒng)的web.config中就是通過注冊(cè)HttpHandlerFactory來實(shí)現(xiàn)aspx頁面的訪問的:

??????<add?path="*.aspx"?verb="*"?type="System.Web.UI.PageHandlerFactory"?validate="true"/>

HttpHandlerFactory是HttpHandler的工廠,通過它來生成不同的HttpHandler對(duì)象。

例子代碼:

????public?class?MyHandlerFactory?:?IHttpHandlerFactory
????{
????????public?IHttpHandler?GetHandler(HttpContext?context,?string?requestType,?string?url,?string?pathTranslated)
????????{
????????????PageHandlerFactory?factory?=?(PageHandlerFactory)Activator.CreateInstance(typeof(PageHandlerFactory),?true);
????????????IHttpHandler?handler?=?factory.GetHandler(context,?requestType,?url,?pathTranslated);

????????????//執(zhí)行一些其它操作
????????????Execute(handler);

????????????return?handler;
????????}

????????private?void?Execute(IHttpHandler?handler)
????????{
????????????if?(handler?is?Page)
????????????{
????????????????//可以直接對(duì)Page對(duì)象進(jìn)行操作
????????????????((Page)handler).PreLoad?+=?new?EventHandler(MyHandlerFactory_PreLoad);
????????????}
????????}

????????void?MyHandlerFactory_PreLoad(object?sender,?EventArgs?e)
????????{
????????????((Page)sender).Response.Write("Copyright?@Gspring<br/>");
????????}

????????public?void?ReleaseHandler(IHttpHandler?handler)
????????{
????????}
????}

web.config中配置:

??????<httpHandlers>
??????<add?verb="*"?path="*.aspx"?type="HttpHandle.MyHandlerFactory,?HttpHandle"/>
??????</httpHandlers>

在例子中我們通過調(diào)用系統(tǒng)默認(rèn)的PageHandlerFactory類進(jìn)行常規(guī)處理,然后在處理過程中加入自己的代碼,可以在Page對(duì)象上附加自己的事件處理程序。

附一個(gè)小的惡作劇:
我們可以開發(fā)好aspx頁面,然后把web應(yīng)用程序發(fā)布后把所有的aspx文件的后綴都改為spring,再在web.config中加入配置:

??????<httpHandlers>
??????<add?verb="*"?path="*.spring"?type="HttpHandle.MyHandlerFactory,?HttpHandle"/>
??????</httpHandlers>
??????<compilation>
????????<buildProviders>
??????????<add?extension=".spring"?type="System.Web.Compilation.PageBuildProvider"/>
????????</buildProviders>
??????</compilation>

buildProviders是用來指定spring后綴的編譯程序,我們把它設(shè)置成和aspx一致就可以了。如果在IIS中發(fā)布的話還需要在應(yīng)用程序配置中加入spring的后綴映射。
然后我們就可以通過?http://../.../*.spring來訪問我們的網(wǎng)站了

出處:https://www.cnblogs.com/firstyi/archive/2008/05/07/1187274.html

轉(zhuǎn)載于:https://www.cnblogs.com/hedianzhan/p/8410396.html

總結(jié)

以上是生活随笔為你收集整理的C#强化系列:HttpModule,HttpHandler,HttpHandlerFactory简单使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。