亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

ASP.Net中自定義Http處理及應用之HttpHandler篇

2019-11-18 19:50:34
字體:
來源:轉載
供稿:網友

在開發基于Microsoft IIS的應用時,開發者除了可以編寫asp程序外,還可以使用Visual C++等開發工具,開發ISAPI應用,以獲取更為強大的功能。可以編寫兩種ISAPI擴展:一種是ISAPI Server Extention,另一種是ISAPI Filter,但是,ISAPI擴展應用的編寫通常對開發者有比較高的要求,開發和部署的難度比較大。 在開發asp.net應用時,我們仍然可以編寫ISAPI應用,以擴充IIS的功能,但是,ASP.Net為我們提供了另外一種選擇——使用HTTP Handler 和HTTP Module。這是通過使用IHttpHandler 和 IHttpModule接口來實現的。HTTP Handler提供了類似于ISAPI Server Extention的功能,而HttpModule實現了類似于ISAPI Filter的功能,并且,比ISAPI,在開發和部署上都要簡單的多。 應用HttpHandler和HttpModule,使應用程序可以與IIS Web服務器的低級別請求和響應服務交互。本文首先介紹HttpHandler和HttpModule的概念和基本使用方法,并介紹了一個應用HttpModule實現權限系統的案例。
HTTP 處理管道的基本模型
要對HttpModule和IHttpHandler進行研究,必須先對ASP.Net的處理管道有一個了解。 在ASP.Net應用程序中,系統使用一組相關的類,通過一定的順序來處理客戶端的請求(Request),ASP.NET應用程序的處理模式可稱之為HTTP處理管道。HttpModule和IhttpHandler就是這個處理管道上的兩個處理環節。 HTTP處理管道中的類在System.Web名稱空間中定義,主要有以下類型: · HttpWorkerRequest 抽象類定義了ASP.Net頁面處理請求的基本方法; · HttPRuntime 提供了處理應用的一組服務; · HttpContext 保存了處理一次請求的所有相關上下文信息; · HttpapplicationFactory 提供相關目錄的應用程序; · HttpApplication 定義了所有ASP.Net應用程序的通用的方法、屬性和事件。這個類也是在用戶在global.asax文件中定義的應用的基類; · Modules 處理請求前和響應后的事件; · HandlerFactories 提供應用程序中的Handlers; · Handlers 處理請求和響應。 HTTP處理管道的模型如下:

圖1:HTTP 處理管道
在Windows平臺上,HTTP Pipline需要IIS的支持。為了運行ASP.NET應用,IIS需要以下兩個文件:ASPNET_ISAPI.DLL和ASPNET_WP.EXE · ASPNET_ISAPI.DLL是一個ISAPI Extention他將發向IIS的請轉交ASPNET_WP.EXE處理 · ASPNET_WP.EXE使用HttpRuntime對請求進行具體處理 處理的過程可以用圖表示如下:

圖2:IIS上的HTTP處理管道
 
HttpHandler的實現
HttpHandler實現了類似于ISAPI Extention的功能,他處理請求(Request)的信息和發送響應(Response)。HttpHandler功能的實現通過實現IHttpHandler接口來達到。實際上,我們在編寫ASP.Net頁面時,ASP.Net頁面所繼承的基類——System.Web.UI.Page——也實現了HttpHandler接口,也是一個HttpHandler,看一下它的定義就知道了(C#):
public class Page : TemplateControl, IhttpHandler
 

接口IHttpHandler的定義如下:
interface IHttpHandler
{
void ProcessRequest(HttpContext ctx);
bool IsReuseable { get; }
}
 

接口中ProcessRequest是添加自己的代碼,進行相應處理的地方。IsReuseable屬性指明該HttpHandler的實現類是否需要緩存。 下面的示例展示了HttpHandler的基本使用: 1、建立一個名為MyNameSpace的工程,添加一個類,名稱為MyHandler,代碼如下:
例1:
namespace MyNameSpace
{
public class MyHandler : IHttpHandler
{
public void ProcessRequest(HttpContext ctx)
{
HttpResponse Response
Response.Write("This is my handler");}
public bool IsReusable
{
get { return true; }
}
}
}
 

2、將上面的代碼編譯,生成MyNameSpace.Dll文件; 3、建立一個新的WebApplication項目,或打開一個WebApplication項目,將文件MyNameSpace.Dll添加到項目的引用中,或復制到項目的bin目錄下; 4、修改Web.Config,添加如下內容:
<configuration>   
   <system.web>
   <httpHndlers>
<add verb="*" path="*.aspx"
type=" MyNameSpace.MyHandr, MyNameSpace" />
      </httpHndlers>
</system.web>
</configuration>
 

配置文件中的選項說明: · verb可以是"GET"或"POST",表示對GET或POST的請求進行處理。"*"表示對所有請求進行處理。 · Path指明對相應的文件進行處理,"*.aspx"表示對發給所有ASPX頁面的請求進行處理??梢灾该髀窂剑?/test/*.aspx",表明只對test目錄下的ASPX文件進行處理。 · Type屬性中,逗號前的字符串指明HttpHandler的實現類的類名,后面的字符串指明Dll文件的名稱。 現在,請求項目中的任何ASPX頁面,頁面上顯示的始終只有如下一行字:
This is my handler
 


因為,我們自定義的Handler截獲了所有發向ASPX頁面的請求,并且用自己的的方法來處理這些請求了。 為了使我們的ASPX頁面能夠順利運行,我們需要修改Web.Config文件:
<configuration>   
    <system.web>
   <httpHndlers>
<add verb="*" path="*.foo"
type=" MyNameSpace.MyHandr,hander" />
      </httpHndlers>
</system.web>
</configuration>
 


為了讓對后綴名為.foo的文件的請求能夠被我們的Handler截獲運行,我們還需要一些額外的工作。打開IIS的管理控制臺,又鍵單擊站點,選擇"屬性",跳出站點的屬性對話框。選擇主目錄選項。如圖3:

圖3:Web站點屬性對話框
選擇配置,彈出應用程序配置對話框,將".foo"添加到應用程序映射中,如圖4:

圖4:添加應用程序映射
好了,我們現在可以在項目中添加一個.foo文件,當向該文件發送請求時,瀏覽器顯示:
This is my handler
 


而對其他ASPX文件的訪問不受影響。
實現Handler Factory
實現HttpHandler功能的另外一個選擇是實現一個Handler Factory,這是通過實現IHttpHandlerFactory接口來實現的。 IHttpHandlerFactory接口的定義如下:
interface IHttpHandlerFactory
{
IHttpHandler GetHandler(HttpContext ctx,
string requestType,
string url,
string pathTranslated);
void ReleaseHandler(IHttpHandler handler);
}
 


GetHandler方法在請求開始的時候被調用,而ReleaseHandler在請求結束,所有的Handler都不再需要的時候被調用。 使用HttpHandlerFactory的過程一般如下: 首先定義實際處理HttpHandler的類,這個類會在HandlerFactory中被調用以進行實際的處理:
public class BasicHandler : IHttpHandler { ... }
 


然后,定義自己的HandlerFactory:
public class BasicHandlerFactory : IHttpHandlerFactory
{
public IHttpHandler GetHandler(HttpContext ctx,
string requestType,
string url,
string pathTranslated)
{
return new BasicHandler();
}
public void ReleaseHandler(IHttpHandler handler) {}
}
 


最后,在Web.Config文件中注冊這個Factory:
<configuration>
<system.web>
<httpHandlers>
<add verb="POST" path="*.foo"
type="MyNamespace.BasicHandlerFactory, MyAssembly" />
</httpHandlers>
</system.web>
</configuration>

異步Handler
通過實現IHttpAsyncHandler可以實現對HTTP請求的異步處理。IHttpAsyncHandler接口繼承IHttpHandler,也需要實現ProcessRequest 方法和 IsReusable 屬性,同時,需要實現 BeginProcessRequest 和 EndProcessRequest 方法。BeginProcessRequest 啟動異步調用以處理單個的 HTTP 請求,而 EndProcessRequest 則在該進程結束時執行清理代碼。 IHttpAsyncHandler的實現和注冊同IHttpHandler類似,讀者可以參考MSDN的相關文檔。 現在,大家是否對HTTP Handler的概念和應用有了一定的了解?在下一篇文章中,我們將主要介紹HTTP Module的的應用,并給出使用HttpModule實現權限系統的實例。  


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
午夜精品久久久久久久久久久久久| 久久天天躁狠狠躁夜夜爽蜜月| 国产狼人综合免费视频| 中文.日本.精品| 中文字幕亚洲综合久久筱田步美| 欧美理论片在线观看| 国产成人激情小视频| 亚洲成年人影院在线| 最近2019好看的中文字幕免费| 久久久久久久一区二区三区| 国产精品女人久久久久久| 国产91精品久久久久| 亚洲奶大毛多的老太婆| 亚洲日本中文字幕| 欧美性感美女h网站在线观看免费| 亚洲欧美国产一本综合首页| 国产成人jvid在线播放| 97av在线视频| 国产日韩欧美在线观看| 亚洲一区二区三区在线视频| 久久视频在线观看免费| 538国产精品一区二区在线| 78m国产成人精品视频| 日韩精品视频在线观看免费| 欧美成人黑人xx视频免费观看| 另类美女黄大片| 亚洲激情免费观看| 国产精品直播网红| 国产精品久久一区主播| 欧美激情一区二区三区高清视频| 91理论片午午论夜理片久久| 久久精品国产成人| 性欧美办公室18xxxxhd| 136fldh精品导航福利| 91精品国产色综合| 欧美亚洲国产精品| 亚洲成人久久久久| 丝袜亚洲欧美日韩综合| 亚洲女在线观看| 亚洲午夜色婷婷在线| 亚洲福利在线播放| 国产精品丝袜视频| 狠狠躁夜夜躁人人爽天天天天97| 亚洲精品免费一区二区三区| 国产一区二区av| 亚洲女人被黑人巨大进入| 亚洲国产精品99| 亚洲一区二区免费| 国产精品视频精品视频| 丁香五六月婷婷久久激情| 欧美成在线视频| 久久成人精品一区二区三区| 欧美激情网友自拍| 国产精品久久久久久久久久久不卡| 69视频在线播放| 精品国产91久久久久久老师| www.日韩视频| 国产精品在线看| 精品无码久久久久久国产| 久久影院免费观看| 亚洲精品91美女久久久久久久| 国产精品免费观看在线| 国产成人久久精品| 色偷偷av一区二区三区| 欧美日韩人人澡狠狠躁视频| 日韩色av导航| 久久久久久久久久久人体| 国产成人av在线播放| 日韩中文字幕不卡视频| 97视频在线观看亚洲| 精品国产91久久久| 亚洲男女自偷自拍图片另类| 91日本在线观看| 中文字幕综合在线| 成人a在线观看| 亚洲国内高清视频| 日韩在线精品一区| 成人久久18免费网站图片| 久久久亚洲影院你懂的| 欧美性猛交xxxxx免费看| 国产精品入口夜色视频大尺度| 深夜福利一区二区| 久久久视频免费观看| 日韩免费观看在线观看| 992tv在线成人免费观看| 91沈先生在线观看| 日韩国产中文字幕| 亚洲国产精品99久久| 中文亚洲视频在线| 日韩一区二区三区在线播放| 日韩精品中文字| 中文字幕亚洲二区| 日本精品久久中文字幕佐佐木| 国产精品va在线播放我和闺蜜| 亚洲第一偷拍网| 日本精品视频在线| 日韩小视频在线| 亚洲色图第一页| 亚洲午夜性刺激影院| 亚洲精品不卡在线| 亚洲男人的天堂在线播放| 伊人久久男人天堂| 91久久精品国产| 国产一区二区三区在线观看视频| 国产成人精品免高潮在线观看| 在线日韩av观看| 欧美裸体xxxxx| 一区二区三区日韩在线| 国产成人精品日本亚洲专区61| 国产精品91久久久久久| 一区二区三区天堂av| 亚洲精品白浆高清久久久久久| 国产成人精品免费视频| 亚洲日本成人网| 亚洲午夜精品视频| 福利一区视频在线观看| 91大神福利视频在线| 琪琪亚洲精品午夜在线| 久久精品国产一区二区三区| 97欧美精品一区二区三区| 国产欧美精品久久久| 国产免费观看久久黄| 夜色77av精品影院| 亚洲国产精品成人一区二区| 成人免费视频网| 欧美亚洲国产另类| 国产精品91在线| 国产精品老牛影院在线观看| 色综合亚洲精品激情狠狠| 亚洲女在线观看| 孩xxxx性bbbb欧美| 色悠悠国产精品| 性亚洲最疯狂xxxx高清| 亚洲精品日韩av| 亚洲精品乱码久久久久久按摩观| 国产福利精品av综合导导航| 亚洲三级免费看| 国模精品视频一区二区| 亚洲国产高潮在线观看| 日韩福利视频在线观看| 亚洲成年人在线播放| 精品日本美女福利在线观看| 日韩精品小视频| 日韩精品视频在线观看网址| 国产美女精品视频| 国产精品久久久久久久av大片| 久久噜噜噜精品国产亚洲综合| 亚洲美女福利视频网站| 欧美日韩裸体免费视频| 久久综合免费视频影院| 亚洲成色777777女色窝| 成人免费观看49www在线观看| 91精品国产综合久久男男| 国产精品美女久久| 日韩中文字在线| 亚洲伊人一本大道中文字幕| 成人a视频在线观看| 日韩精品免费观看| 96sao精品视频在线观看| 日本亚洲欧洲色α| 粉嫩av一区二区三区免费野| 亚洲性线免费观看视频成熟| 日韩av手机在线观看| 中文字幕日本欧美|