中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ASP.NET中httpHandler如何使用

發布時間:2021-07-16 11:21:56 來源:億速云 閱讀:128 作者:Leah 欄目:編程語言

本篇文章為大家展示了ASP.NET中httpHandler如何使用,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

Asp.net系統框架自身有一個http處理的邏輯。這個邏輯由machine.config的 名為httpRuntime的節指定

﹤httpHandlers﹥。。。﹤/httpHandlers﹥

告訴ASP.NET框架一個應用程序的http處理程序缺省情況下該如何決定處理邏輯。所謂如何處理是指http 謂詞(Verb)和資源的位置(Path)組合決定的請求的處理。

例如:

﹤add      verb="*"    path="*.aspx"    type="System.Web.UI.PageHandlerFactory" /﹥

告訴ASP.NET在處理任何”.aspx”的文件的任何請求(post/get/head/put)時候都應該使用System.Web.UI.PageHandlerFactory類處理請求。這個類是系統框架缺省類,遵循System.Web.IhttpHandler接口(但是由MS官方實現)。如果你在研究透aspx頁框架后,你可以自己寫一個aspx頁工廠處理程序,簽名后加入全局應用程序,再修改此處即可讓aspx頁面沒處理時是按照自己實現的邏輯進行(你甚至可以不遵循頁面控件實現邏輯,雖然那樣并無太大意義)。

我們來做個實驗:我們利用瀏覽器發出對.config文件的請求(譬如web.config),卻省情況下asp.net會報告錯誤,但是假若我們刪除machine.config中的

﹤add       verb="*"      path="*.config"     type="System.Web.HttpForbiddenHandler" /﹥

并保存。重新請求該文件后,那么會看到瀏覽器可以讀取到此文件并可顯示。重新加上該節,重新請求會看到系統報告錯誤。這充分說明了http處理工廠是根據配置文件進行處理的。據此類推,我們可以閱讀machine.config的其他相關配直節,充分理解系統缺省處理邏輯是如何處理web請求(具體為合法的http請求)的。另外,web.config也可以據此增加/刪除指定http處理程序。參考MSDN,我們發現,任何一個HTTP處理程序實際上是實現了System.Web.IhttpHandler接口的asp.net類。接口應當實現一個屬性和一個借口方法:

公共屬性

IsReusable 獲取一個值,該值指示其他請求是否可以使用 IHttpHandler 實例。決定了此處理程序是否可以重用(通常克服用意味著系統性能的提高)

公共方法

ProcessRequest 通過實現 IHttpHandler 接口的自定義 HttpHandler 啟用 HTTP Web 請求的處理。也就是處理實現。

ASP.NET httpHandler使用問題:假設我們寫好了一個http處理程序,如何讓他發揮作用呢?譬如,我們需要禁止asp.net下載.info文件,我們應該進行如下處理:

***步,在web服務器上增加指示,讓asp.net處理此擴展名。具體為:

打開IIS(假設web服務器是IIS),找到應用程序,配置,應用程序映射,添加映射,在可執行文件中輸入當前.net版本的aspnet_isapi.dll(如C:\WINNT\Microsoft.NET\Framework\v1.0.3705\aspnet_isapi.dll),擴展名輸入.info,謂詞全部,檢查文件是否存在。經過這些步驟,確保IIS不會自作多情處理.info文件,而讓給aspnet_isapi.dll處理,后者則會將請求交給asp.net進行處理。

第二步,在machine.config或者web.config中加入相映配置節。都是在﹤System.Web〉中的加入﹤httphandler﹥子節,按照格式指定,譬如:

﹤httphandlers﹥    …    ﹤add verb=”*” path=”*.info” type=” System.Web.HttpForbiddenHandler”﹥   …   ﹤/httphandlers﹥

經過上述節配置,.info文件會被保護起來,任何企圖訪問都會被告知“無法提供此類型的頁。”;如果換成你自己的類,則被asp.net框架所調用來處理.info請求。

下面來實現一個http處理程序例子,我們增加一個擴展名.img,img文件根據參數生成一個圖片,譬如我們向ASP.NET框架請求 abc.img,那么系統返回content為image/jpg格式的圖片,圖片內容為abc

源代碼如下:

using System;   using System.Web ;   using System.Drawing;    using System.Drawing.Drawing2D ;    using System.Drawing.Imaging ;        namespace ImyWeb   {      public class IMG : System.Web.IHttpHandler        {            public IMG()            {}              public bool IsReusable           {                get{ return true;}      }          public void ProcessRequest(HttpContext context)           {         string vstr=_getViewString(context);         context.Response.ContentType ="image/jpeg";          Image img=new Bitmap(128,128,PixelFormat.Format32bppArgb );           Graphics g=Graphics.FromImage(img);            Brush backBrush=new SolidBrush(Color.Gray ); //灰色                      Brush textBrush=new SolidBrush(Color.Black );                 g.FillRectangle(backBrush,0,0,128,128);                      Font ft=new Font( "Arial",32);          g.DrawString(vstr,ft,textBrush,    new RectangleF(0,0,128,128),    new StringFormat(StringFormatFlags.NoWrap ));                      img.Save(context.Response.OutputStream,ImageFormat.Jpeg );                      context.Response .Flush();            backBrush.Dispose();   textBrush.Dispose();    g.Dispose();   img.Dispose();    return ;            }             //************//             private string _getViewString(HttpContext context)            {                 string str= context.Request.RawUrl ;                 int l1=str.LastIndexOf("/");                 int l2=str.LastIndexOf(".");                  return str.Substring(l1+1,l2-l1-1);             }         }   }

編譯后,得到應用程序為myHttpHandler.dll。

現在,我們需要告訴ASP.NET應用程序(假設我們的web應用程序在localHost/webApp1下),如何處理.img文件了:

***步,在web服務器上增加指示,讓asp.net處理此.img的擴展名(讓IIS歇著吧,不要插手asp.net的事了,讓asp.net處理*.img了)

第二,在web.config中的﹤system.web﹥節中增加:

﹤httpHndlers﹥         ﹤add verb="*" path="*.img" type="IBuySpy.IMG,IMGHttphandler" /﹥   ﹤/httpHndlers﹥

為了能夠讓ASP.NET程序能夠定位到應用程序集,將myHttpHandler.dll拷貝到web應用程序的bin目錄

接下來,我們測試:在測試的web應用程序WebApp1下隨意請求一個.img的資源,將會得到一個jpg圖片。http://localhost/WebApp1/test.img

以上為一個簡單的ASP.NET httpHandler處理程序的設計、安裝過程。實際上,假設你對asp.net缺省的*。aspx 的HttpHandler處理不滿,你可以自己進行設計,替換覆蓋掉machine.config中關于*.aspx的缺省處理類 "System.Web.UI.PageHandlerFactory”。你要明白,ms設計了一個服務框架,而這個框架內具有了基本的處理能力,但是優秀的是這個框架的部分落及是可以根據自己的意愿進行替換的(我們看到大量的接口使用,我們應當意識到那是使用了大量的現代軟件設計技術和思想)。學習asp.net技術要站在全局來了解框架各個組成部分間如何執行、調用、發生關系、縣戶作用,這比實現了一個花哨的datagrid要更有意義。

上述內容就是ASP.NET中httpHandler如何使用,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

淮北市| 博湖县| 额敏县| 和顺县| 历史| 长海县| 香格里拉县| 旬阳县| 安康市| 乌拉特前旗| 红河县| 阿鲁科尔沁旗| 伊金霍洛旗| 海丰县| 玉屏| 莒南县| 岑溪市| 思南县| 青铜峡市| 嫩江县| 富蕴县| 鹤峰县| 蒙山县| 仪征市| 廊坊市| 丰都县| 安丘市| 宜城市| 尉氏县| 西乌珠穆沁旗| 海林市| 介休市| 武隆县| 建湖县| 霞浦县| 社旗县| 山丹县| 巴林左旗| 贵州省| 高清| 大足县|