婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 關于HttpHandler與HttpModule的理解和應用方法

關于HttpHandler與HttpModule的理解和應用方法

熱門標簽:怎樣在地圖標注消火栓圖形 地圖標注位置多的錢 山東防封電銷卡辦理套餐 百度地圖標注點擊事件 濟源人工智能電話機器人價格 廈門四川外呼系統 內蒙古智能電銷機器人哪家強 泰州手機外呼系統軟件 杭州智能電話機器人

神秘的HttpHandler與HttpModule

       大學時候我是從拖控件開始學習asp.net的,對.net的很多類庫對象都不是很了解。所以看到大家寫一些個性的asp.net名詞,就感覺asp.net總有一層神秘的面紗籠罩著,讓我琢磨不透,相信園子里面也有很多和我經歷差不多的.net攻城師。在以前看HttpHandler與HttpModule都是神秘莫測的。哈哈,今天我為大家展示下我對他的理解,以及應用。

      也許你不懂HttpHandler與HttpModule(大俠Return),也許你不知道HttpHandler與HttpModule的用途,也許你似懂非懂。今天,請讓我帶領大家去領略一下HttpHandler與HttpModule的風采,今天我要讓他變得So Easy !!

理解asp.net管線事件

     何謂asp.net管線?簡單的說就是頁面的生命周期,就是頁面從你開始請求到展現在你的瀏覽器期間,asp.net所做的一系列事件。下面給你展現下這些事件(參見與Fish  Li)。

1. 對請求進行驗證,將檢查瀏覽器發送的信息,并確定其是否包含潛在惡意標記。 有關更多信息,請參見 ValidateRequest 和腳本侵入概述。

2. 如果已在 Web.config 文件的 UrlMappingsSection 節中配置了任何 URL,則執行 URL 映射。

3. 引發 BeginRequest 事件。

4. 引發 AuthenticateRequest 事件。

5. 引發 PostAuthenticateRequest 事件。

6. 引發 AuthorizeRequest 事件。

7. 引發 PostAuthorizeRequest 事件。

8. 引發 ResolveRequestCache 事件。

9. 引發 PostResolveRequestCache 事件。

10. 根據所請求資源的文件擴展名(在應用程序的配置文件中映射),選擇實現 IHttpHandler 的類,對請求進行處理。 如果該請求針對從 Page 類派生的對象

(頁),并且需要對該頁進行編譯,則 ASP.NET 會在創建該頁的實例之前對其進行編譯。

11. 引發 PostMapRequestHandler 事件。

12. 引發 AcquireRequestState 事件。

13. 引發 PostAcquireRequestState 事件。

14. 引發 PreRequestHandlerExecute 事件。

15. 為該請求調用合適的 IHttpHandler 類的 ProcessRequest 方法(或異步版 IHttpAsyncHandler.BeginProcessRequest)。 例如,如果該請求針對某頁,則

當前的頁實例將處理該請求。

16. 引發 PostRequestHandlerExecute 事件。

17. 引發 ReleaseRequestState 事件。

18. 引發 PostReleaseRequestState 事件。

19. 如果定義了 Filter 屬性,則執行響應篩選。

20. 引發 UpdateRequestCache 事件。

21. 引發 PostUpdateRequestCache 事件。

22. 引發 EndRequest 事件。

23. 引發 PreSendRequestHeaders 事件。

24. 引發 PreSendRequestContent 事件。
 

     注意:

     1.記著上面這些事件,不是瞎寫的,他們的順序更不是瞎寫的。是頁面從開始請求到頁面展現結束,他們是從一到二十四,從上到下,依次觸發的。

     2.從BeginRequest開始的事件,并不是每個事件都會被觸發,因為在整個處理過程中,隨時可以調用Response.End() 或者有未處理的異常發生而提前結束整個過程。所有事件中,只有EndRequest事件是肯定會觸發的, (部分Module的)BeginRequest有可能也不會被觸發。

     3.如果是IIS7,第10個事件也就是MapRequestHandler事件,而且在EndRequest 事件前,還增加了另二個事件:LogRequest 和 PostLogRequest 。只有當應用程序在 IIS 7.0 集成模式下運行,并且與 .NET Framework 3.0 或更高版本一起運行時,才會支持 MapRequestHandler、LogRequest 和 PostLogRequest 事件。

     總結:這些事件我們可以隨意在你需要的事件中添加方法,類,屬性等一些列屬于你自己對請求的操作。也就是說我們以前都是在頁面級編程,現在,我們可以在請求級處理項目,處理請求。具體怎么做,要看下面的HttpMoudle和HttpHandler的神奇功效了。

理解HttpHandler與HttpModule

     先說HttpHandler。

    首先你應該明白asp.net是怎么處理我們的請求文件的,這里不扯與asp.net無足輕重的看似更加底層的神秘面紗,那么.net是怎么處理我們的請求文件的呢?給你看個東西。


     打開你電腦上C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG\ 目錄下的web.config 文件。找到httpHandlers節點,看他下面都寫了什么。你不想打開的話看我的。

復制代碼 代碼如下:

View Code

httpHandlers>
      add verb="*" path="*.rules" type="System.Web.HttpForbiddenHandler" validate="true"/>
      add verb="*" path="*.xoml" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" validate="false"/>
            add path="*.svc" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" validate="false"/>
            add path="trace.axd" verb="*" type="System.Web.Handlers.TraceHandler" validate="True"/>
            add path="WebResource.axd" verb="GET" type="System.Web.Handlers.AssemblyResourceLoader" validate="True"/>
            add path="*.axd" verb="*" type="System.Web.HttpNotFoundHandler" validate="True"/>
            add path="*.aspx" verb="*" type="System.Web.UI.PageHandlerFactory" validate="True"/>
            add path="*.ashx" verb="*" type="System.Web.UI.SimpleHandlerFactory" validate="True"/>
            add path="*.asmx" verb="*" type="System.Web.Services.Protocols.WebServiceHandlerFactory, System.Web.Services, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" validate="False"/>
            add path="*.rem" verb="*" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" validate="False"/>
            add path="*.soap" verb="*" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" validate="False"/>
            add path="*.asax" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
            add path="*.ascx" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
            add path="*.master" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
            add path="*.skin" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
            add path="*.browser" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
            add path="*.sitemap" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
            add path="*.dll.config" verb="GET,HEAD" type="System.Web.StaticFileHandler" validate="True"/>
            add path="*.exe.config" verb="GET,HEAD" type="System.Web.StaticFileHandler" validate="True"/>
            add path="*.config" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
            add path="*.cs" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
            add path="*.csproj" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
            add path="*.vb" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
            add path="*.vbproj" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
            add path="*.webinfo" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
            add path="*.licx" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
            add path="*.resx" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
            add path="*.resources" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
            add path="*.mdb" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
            add path="*.vjsproj" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
            add path="*.java" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
            add path="*.jsl" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
            add path="*.ldb" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
            add path="*.ad" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
            add path="*.dd" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
            add path="*.ldd" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
            add path="*.sd" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
            add path="*.cd" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
            add path="*.adprototype" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
            add path="*.lddprototype" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
            add path="*.sdm" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
            add path="*.sdmDocument" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
            add path="*.mdf" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
            add path="*.ldf" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
            add path="*.exclude" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
            add path="*.refresh" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
            add path="*" verb="GET,HEAD,POST" type="System.Web.DefaultHttpHandler" validate="True"/>
            add path="*" verb="*" type="System.Web.HttpMethodNotAllowedHandler" validate="True"/>
        /httpHandlers>


       上面這段代碼是這樣理解的:在httpHandlers>結點中將不同的文件類型映射給不同的Handler去處理,對于.aspx來說,是由System.Web.UI.PageHandlerFactory來處理。而對于.cs來說,是由System.Web.HttpForbiddenHandler 處理....

     上面的是默認Handler處理,當然知道了HttpHandler之后,我們也可以自己注冊自己的HttpHandler,寫自己的HttpHandler處理程序,處理不同類型的文件,這個等會兒我實現下,給大家看看。

      問題: 既然HttpHandler的作用是將請求中,各個不同類型后綴名的文件,映射給不同的處理程序去處理,那么處理程序是在頁面生命周期中的那個時間中映射處理請求的呢?

      答: 依照上面的24個事件,這個HttpHandler節點中的映射是在第10個步驟中觸發的。而他映射給不同的處理程序,這些處理程序中方法、類的實現是在第15步觸發的。

      再說HttpModule。      

      HttpHandler是針對一類型的文件,映射給指定的處理程序對請求進行出來。并且映射,與處理都發生在asp.net已經指定好的事件中。

      而HttpModule則是針對所有的請求文件,映射給指定的處理程序對請求進行處理,而這些處理,可以發生在請求管線中的任何一個事件中。也就是說你訂閱哪個事件,這寫處理就發生于那個事件中,處理過后再執行,你訂閱過的事件的下一個事件,當然你也可以終止所有事件直接運行最后一個事件,這就意味這他可以不給HttpHandler機會,很牛的HttpModule。    

HttpHandler的使用  

     HttpHandler的使用通過一種防盜鏈技術來演示

     1.首先注冊HttpHandler:在Web.config中注冊    

復制代碼 代碼如下:

httpHandlers>
                !--映射jpg格式的文件,給ProcessHandler_test.CustomHandler處理。-->
                !--type里面逗號之前 命名空間加類名(ProcessHandler_test.CustomHandler),后面程序集名稱-->
                add path="*.jpg" verb="*" type="httphander_test.CustomHandler, ProcessHandler_test" />
            /httpHandlers>

        上面注冊是把網站中請求jpg格式文件的請求,映射給命名空間為httphander_test類名為CustomHandler的程序集ProcessHandler_test來處理請求。

        2.如果想通過HttpHandler處理請求,必須在映射的處理程序中實現接口IHttpHandler

        3.映射到的程序代碼如下

復制代碼 代碼如下:

View Code

namespace httphander_test
{
    public class CustomHandler :IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
        {
            // 獲取文件服務器端物理路徑
            string FileName = context.Server.MapPath(context.Request.FilePath);
            // 如果UrlReferrer為空,則顯示一張默認的禁止盜鏈的圖片
            if (context.Request.UrlReferrer.Host == null)
            {
                context.Response.ContentType = "image/gif";
                context.Response.WriteFile("/error.gif");
            }
            else
            {
                // 如果 UrlReferrer中不包含自己站點主機域名,則顯示一張默認的禁止盜鏈的圖片
                if (context.Request.UrlReferrer.Host.IndexOf("yourdomain.com") > 0)
                {
                    context.Response.ContentType = "image/gif";
                    context.Response.WriteFile(FileName);
                }
                else
                {
                    context.Response.ContentType = "image/gif";
                    context.Response.WriteFile("/error.gif");
                }
            }
        }

 

        public bool IsReusable
        {
            get { throw new NotImplementedException(); }
        }
    }
}


按 Ctrl+C 復制代碼       上面這個簡單的實例就完成了,如果有Jpg格式文件的請求,而不是在本網站的域名中請求,那么就會輸出一個指定的錯誤圖片來替換原連接圖片。

       總結:httpHandler的功能遠不止這些,希望你能理解他是對一類文件請求的處理,也希望你能理解他在請求管道中的事件位置,這樣對您理解會更有幫助。

HttpModule的使用

        由于HttpModule過于強大的功能,也就是說任何一個請求都要經過注冊過的HttpModule處理程序,所以大家在用他的時候一定要對各種請求做好判斷,也就是處理什么請求,就讓這個請求走那個處理程序,不要讓他每個方法,都去執行。要不會讓程序負重,得不償失。

       使用HttpModule跟HttpHandler的步驟類似,而HttpModule實現的是IHttpModule接口。

       在這里,他的具體案例,我就不寫了,我以前寫過一個Url重寫的案例,就是使用的它,大家可以看看。鏈接為:  url重寫

標簽:喀什 洛陽 朝陽 周口 百色 朔州 新鄉 臺州

巨人網絡通訊聲明:本文標題《關于HttpHandler與HttpModule的理解和應用方法》,本文關鍵詞  關于,HttpHandler,與,HttpModule,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《關于HttpHandler與HttpModule的理解和應用方法》相關的同類信息!
  • 本頁收集關于關于HttpHandler與HttpModule的理解和應用方法的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产精品高潮呻吟| 91福利在线看| 日日夜夜免费精品| 亚洲美女在线一区| 亚洲欧美日韩中文字幕一区二区三区| 久久看人人爽人人| 欧美r级电影在线观看| 日韩欧美激情一区| 欧美成人女星排行榜| 欧美成人精品1314www| 精品久久久久香蕉网| 欧美精品一区男女天堂| 中文字幕av在线一区二区三区| 国产精品久久精品日日| 一区二区三区色| 午夜视频一区在线观看| 久久99精品久久久久久国产越南| 国产一区欧美日韩| 色综合天天综合网天天狠天天| 欧美三级电影一区| 精品99一区二区| 亚洲欧美视频在线观看| 天天操天天干天天综合网| 国产自产2019最新不卡| 91视频观看视频| 91精品午夜视频| 国产精品美女久久久久久久 | 成人免费视频免费观看| 91网站视频在线观看| 欧美日韩亚洲国产综合| 久久久久久夜精品精品免费| 一区二区成人在线| 国产精品77777竹菊影视小说| 99精品在线免费| 日韩免费高清电影| 亚洲另类色综合网站| 奇米一区二区三区| 91丨九色丨国产丨porny| 精品精品国产高清一毛片一天堂| 亚洲欧美日韩一区二区 | 久久夜色精品国产欧美乱极品| 国产欧美日韩视频一区二区| 夜色激情一区二区| a4yy欧美一区二区三区| 欧美哺乳videos| 亚洲成a人v欧美综合天堂| 成人免费视频视频| 精品国精品国产尤物美女| 亚洲电影一级片| 91丨porny丨户外露出| 久久影音资源网| 美女视频网站久久| 欧美视频在线播放| 亚洲视频 欧洲视频| 国产成人综合亚洲91猫咪| 日韩精品一区二区三区视频在线观看 | 成人午夜精品一区二区三区| 欧美成人激情免费网| 亚洲va国产va欧美va观看| 色先锋资源久久综合| 国产精品蜜臀av| 成人av先锋影音| 国产嫩草影院久久久久| 国产成人在线视频免费播放| 久久只精品国产| 激情综合网最新| 欧美精品一区二区三区四区| 久久精品国产亚洲高清剧情介绍| 91精品国产91久久综合桃花| 五月激情综合色| 欧美日韩成人综合天天影院| 午夜精品久久久久久久久久久| 欧美三级电影一区| 五月综合激情婷婷六月色窝| 91精品婷婷国产综合久久| 日韩在线卡一卡二| 欧美一级艳片视频免费观看| 久久99久久精品| 欧美激情在线一区二区| 成人午夜精品在线| 亚洲一区二区在线播放相泽| 欧美老人xxxx18| 精品在线观看视频| 久久综合av免费| 成人黄页在线观看| 亚洲男人的天堂av| 欧美日韩在线直播| 久99久精品视频免费观看| 国产三级精品在线| 色综合久久66| 秋霞影院一区二区| www国产成人免费观看视频 深夜成人网| 精品一区二区影视| 亚洲图片你懂的| 在线播放视频一区| 丁香网亚洲国际| 亚洲一区二区精品视频| 日韩免费电影网站| 91一区二区在线| 日欧美一区二区| 国产精品女同互慰在线看| 在线观看免费视频综合| 激情小说亚洲一区| 亚洲美女视频在线观看| 精品久久久久久久一区二区蜜臀| youjizz久久| 青青草成人在线观看| 中文字幕在线观看一区| 日韩午夜电影av| av电影在线不卡| 久久福利资源站| 夜夜精品视频一区二区| 欧美国产欧美综合| 4438成人网| 日本久久电影网| 国产成人精品亚洲777人妖| 亚洲影院免费观看| 日本一区二区三区电影| 日韩免费看网站| 欧美四级电影网| av中文字幕不卡| 国产一区二区三区美女| 图片区小说区区亚洲影院| 亚洲欧洲日韩av| 欧美精品一区视频| 国产精品久久久久精k8| 精品国产第一区二区三区观看体验| 欧美视频一区在线| 99视频一区二区三区| 国产剧情一区在线| 精品一区二区三区免费毛片爱| 一区二区三区不卡视频| 日韩一区有码在线| 国产网站一区二区三区| 2024国产精品| 欧美一区二区视频观看视频| 欧美亚洲国产一区在线观看网站| 99视频一区二区三区| 成人ar影院免费观看视频| 国产一区二区三区在线看麻豆| 玖玖九九国产精品| 麻豆91小视频| 狠狠色丁香久久婷婷综合丁香| 美国毛片一区二区三区| 日韩专区在线视频| 日韩成人伦理电影在线观看| 午夜影院在线观看欧美| 亚洲sss视频在线视频| 香蕉加勒比综合久久| 丝袜a∨在线一区二区三区不卡| 一级女性全黄久久生活片免费| 亚洲小说欧美激情另类| 天天亚洲美女在线视频| 日本不卡高清视频| 久久99深爱久久99精品| 国产电影一区二区三区| 不卡视频一二三四| 91亚洲永久精品| 欧美日韩一本到| 欧美大片免费久久精品三p | 亚洲欧美日韩一区二区三区在线观看| 国产精品色一区二区三区| 最新国产精品久久精品| 亚洲人成人一区二区在线观看| 一区二区三区四区中文字幕| 日韩高清在线不卡| 国产麻豆成人精品| 99re这里只有精品首页| 欧美电影在线免费观看| 精品乱人伦小说| 国产精品久久久久永久免费观看| 亚洲精品国产一区二区三区四区在线| 亚洲狠狠爱一区二区三区| 久久99精品久久久久婷婷| 波多野结衣亚洲一区| 欧美日韩在线免费视频| 久久久久久久久久看片| 亚洲女同女同女同女同女同69| 舔着乳尖日韩一区| 国产成人av网站| 欧美日韩aaa| 中文字幕乱码一区二区免费| 亚洲一区二区偷拍精品| 国产一区欧美二区| 欧美色窝79yyyycom| 久久精品欧美一区二区三区不卡 | 国内成人自拍视频| 91丨九色丨尤物| 精品少妇一区二区三区日产乱码| 亚洲视频免费在线| 老司机精品视频导航| 欧美综合视频在线观看| 国产喷白浆一区二区三区| 日韩激情一区二区| 色综合天天做天天爱| 久久久久国产精品免费免费搜索| 午夜精品爽啪视频| 色狠狠一区二区| 亚洲国产精品99久久久久久久久 | 免费精品99久久国产综合精品|