課程代碼課件58-pipelinemvc管道處理模型1httphandler_第1頁(yè)
課程代碼課件58-pipelinemvc管道處理模型1httphandler_第2頁(yè)
課程代碼課件58-pipelinemvc管道處理模型1httphandler_第3頁(yè)
課程代碼課件58-pipelinemvc管道處理模型1httphandler_第4頁(yè)
已閱讀5頁(yè),還剩8頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

引Part.1HttpHttpHttpIHttpHandler,一個(gè)是IHttpModulePart.1一筆帶過。所謂,前面已經(jīng)介紹了不少概念和原理。在本文中,我們通過幾個(gè)范例來(lái)了解IHttpHandler,看看掌握這些原理的實(shí)際用途。IHttpHandler可能和我一樣,很多Asp.Net開發(fā)人員都有過Asp的背景,以至于我們?cè)陂_發(fā)程序的Http實(shí)際上,F(xiàn)ramework提供了一系列的接口和類,允許你對(duì)于Http請(qǐng)求進(jìn)行編程,而實(shí)現(xiàn)這一操作的一個(gè)主要的接口,就是IHttpHandlerIHttpModule)。應(yīng)該還記得第一節(jié)中我們提到過ISAPI,它根據(jù)文件名后綴把不同的請(qǐng)求轉(zhuǎn)交給不同的處理程序。但是仔細(xì)看看就會(huì)發(fā)現(xiàn):幾乎一大半的文件都交給aspnet_isapi.dll去處理了。很明顯,aspnet_isapi.dll不可能對(duì)每種文件采用同式處理,那么aspnet_isapi.dll題,我們需要打開機(jī)器上C:\WINDOWS\.NET\Framework\v2.0.50727\CONFIG\目web.config文件。NOTE:machine.config......//<addpath="*.axd"verb="*"validate="True"/><addpath="*.aspx"type="System.Web.UI.PageHandlerFactory"validate="True"<addpath="*.ashx"type="System.Web.UI.SimpleHandlerFactory"validate="True"<addpath="*.asax"verb="*"validate="True"<addpath="*.ascx"verb="*"validate="True"<addpath="*.config"type="System.Web.HttpForbiddenHandler"validate="True"<addpath="*.cs"verb="*"validate="True"<addpath="*"type="System.Web.DefaultHttpHandler"validate="True" 可以看到,在<httpHandlersHandler理,對(duì)于.aspxSystem.Web.UI.PageHandlerFactorycsSystem.Web.HttpForbiddenHandlerForbiddenHandler是一個(gè)上面列出的是.NetFrameworkHttpHandler。而如果我HttpIHttpHandlerpublicinterfacevoidProcessRequest(HttpContextboolIsReusable{get;}IHttpHandlerHttptrue。publicclassCustomHandler:publicvoidProcessRequest(HttpContextcontext)處理請(qǐng)求的代}publicboolIsReusableget{returntrue;}} 下的中它<addpath="*.jpg"verb="*"type="MyNameSpace.MyClass,應(yīng)該發(fā)現(xiàn)這與之前在C:\WINDOWS\.NET\Framework\v2.0.50727\CONFIG\目錄下web.config中看到的幾乎完全一樣。這里,path指的是請(qǐng)求的文件名稱,可以使用通配符擴(kuò)大范圍,也可以明確指定這個(gè)handler僅用于處理某個(gè)特定的文件(比如說:filename.aspx)的請(qǐng)求。verb指的是請(qǐng)求此文件的方式,可以是post或get,用*代表所有方式。type屬性由“,”分隔成兩部分,第一部分是實(shí)現(xiàn)了接口的類名,第二部分是位于Bin NOTE:NOTE:如果你新建一個(gè)項(xiàng)目,并且在項(xiàng)目下創(chuàng)建HandlerTest.cs,然后讓站點(diǎn) NOTE:MyDll只寫程序集名,不要加后面的.dll 使用HttpHandler實(shí)現(xiàn)防盜NOTE:NOTE:這個(gè)例子,以及下面的一個(gè)例子均來(lái)自于World,Object-OrientedDevelopmentizingASP.NETStep.1CustomHandler.csusingusingnamespacepublicclassJpgHandler:publicvoidProcessRequest(HttpContext獲取文件服務(wù)器端物理路stringFileName//如果UrlReferrer為空,則顯示一張默認(rèn)的盜鏈if(context.Request.UrlReferrer.Host==context.Response.ContentType=UrlReferrer中不包含自己站點(diǎn)主,則顯示一張默盜鏈 ")>context.Response.ContentType=context.Response.ContentType=}}}publicboolget{returntrue;}}}Step.2csccsc/t:library/r:System.Web.dllStep.3CustomHandler.dllBinStep.4在Web.Config中這個(gè)Handler<addpath="*.jpg"verb="*"CustomHandler" 通過IhttpHandlerStep.1Vs2005,“添加新項(xiàng)”,“一般處理程序”。新建文件后,VS<%@WebHandlerLanguage="C#"Class="Handler"usingusingpublicclassHandler:IHttpHandlerpublicvoidProcessRequest(HttpContextcontext)context.Response.ContentType= o}publicboolIsReusablegetreturn}}}Step.2<%@WebHandlerLanguage="C#"Class="Handler"usingusingusingusingusingusingpublicclassHandler:IHttpHandler,IRequiresSessionStatepublicvoidProcessRequest(HttpContextcontext)context.Response.ContentType=Bitmapbasemap=newBitmap(200,Graphicsgraph=graph.FillRectangle(newSolidBrush(Color.White),0,0,Fontfont=newFont(FontFamily.GenericSerif,FontStyle.Bold,Randomr=newstringletters=stringStringBuilders=newfor(intx=0;x<5;x++)letter=letters.Substring(r.Next(0,letters.Length-graph.DrawString(letter,font,newx*38,r.Next(0,}PenlinePen=newPen(newSolidBrush(Color.Black),for(intx=0;x<6;graph.DrawLine(linePen,newPoint(r.Next(0,199),59)),newPoint(r.Next(0,199),r.Next(0,//將保存到輸出流basemap.Save(context.Response.OutputStream,context.Session["CheckCode"] //如果沒有實(shí)}publicboolIsReusableget{returntrue;}}需要特別注意的是,HandlerIHttpHandlerHandlerSessionStateIRequiresSessionState個(gè)接口,MSDN:SpecifiesthatthetargetHTTPhandlerrequiresreadandwriteaccesstosession-statevalues.Thisisamarkerinterfaceandhasnomethods.(HttpHandlerSessionStatepublicpublicinterfaceHttpHandlerSessionState,必須實(shí)現(xiàn)這個(gè)接口,實(shí)際上也就是在類的標(biāo)頭將這個(gè)Step.3新建一個(gè)ImageCode.aspx頁(yè)面,在HTML<img<imgsrc="Handler.ashx""利用HttpHandler創(chuàng)建自定義后綴RssRSSRSS.aspxCodeBehindXMLResponseOutputStreamRssRss.aspxISAPIHttpHandler.rss作為后綴名的文件來(lái)實(shí)現(xiàn)RssArticle.rss?,F(xiàn)在我們就一步步來(lái)實(shí)現(xiàn)它:內(nèi)容,可以參閱我編譯的在Web站點(diǎn)中創(chuàng)建和使用NOTE:關(guān)于RSSStep.1CreateTable( Int Not NotNullConstraint Not NotNullDefault[Description] Not NotConstraintpk_RssSamplePrimary)插入范例數(shù)InsertIntoRssSample(Title,Author,[Description],Values('標(biāo)題1','作者1','文章1',''省略Step.2建立站點(diǎn),在App_Code 下建立RssFeedsLib.cs文usingusingusingusingusingSystem.Data.Sql; usingSystem.IO; usingSystem.Web; usingSystem.Xml; using namespaceRssFeadsLib publicclassRssGenerator publicstaticstringGetRSS() MemoryStreamms=new XmlTextWriterwriter=newXmlTextWriter(ms, Source=.;InitialCatalog=Sample;UserSqlConnectionconn=new mandcmd=new mand("select*fromRssSample orderbypubdatedesc", SqlDataReaderreader= writer.WriteAttributeString("version", writer.WriteElementString("titlewriter.WriteElementString("title"TraceFact.Net技術(shù)文 //Channel下的結(jié)點(diǎn)靜態(tài)寫 writer.WriteElementString("description","Dedicatedto writer.WriteElementString("copyright","Copyright(C) writer.WriteElementString("generator",writer.WriteElementString("generator","MyRSSItemwhile(reader.Read()) writer.WriteStar reader.Get reader.GetDateTime(reader.GetOrdinal("PubDate")).ToString(@"ddd,ddMMMyyyy12:00:00tt byte[]data=new ms.Seek(0, ms.Read(data,0, return Step.3rssRssFeedsLib.rssHttppublicclasspublicbool{get{return}publicvoidProcessRequest(HttpContextcontext.Response.ContentType=stringstr=}}Step.4在Web.config<add<addpath="*.rss"type="RssFeadsLib.RSSHandler"verb="GET"NOTE:NOTE:因?yàn)檫@個(gè)類和命名空間位于App_Code中,這里就不需要再手動(dòng)編譯RssFeadsLib.cs然后將編譯好的.dll應(yīng)用程序集放到Bin 這樣,將會(huì)在《Asp.Net構(gòu)架與安全機(jī)制Part.5–頁(yè)面生存周期與編譯模型》中Step.5在IIS對(duì)ISAPI選擇“主點(diǎn)擊“添加”,設(shè)置“可執(zhí)行文件”為輸入任意以.rss后綴結(jié)尾的文件名,均會(huì)交由上面創(chuàng)建的Handler去處理,而不管Article.rssSample.rss。Step.6Default.aspx,然后我們?cè)诘刂窓趯⑽募臑椋篈rticle.rssabc.rssIHttpHandlerFactory.rss理.atom后綴名,假設(shè)處理atom的類命名為AtomHandler,那么我們的Web.config該如 <addpath="*.rss"type="RssFeadsLib.RSSHandler

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論