ASP.NET ASHX 一般處理程序教程 (轉載)

你不想創建一個普通ASP.NET的Web窗體頁。而又要通過一個查詢字元串返回一個動態的圖片、XML或者非HTML網頁。這是一個用C#編程語言編寫的使用ASHX(一般處理程序)的簡單教程。

簡介首先,我們來回顧一下使用ASHX文件的目的。也許我們想在URL中使用這個ASHX文件動態的返回數據內容。我們使用的URL查詢字元串如下:http://www.dotnetperls.com/?file=name.入門:怎麼添加一個ASHX文件呢?打開你的ASP.NET網站,在網站上點擊"添加新項"的菜單,此時打開了"添加新項"窗口,選擇一般處理程序(Generic Handler),這時你將看到一個有一些代碼的Handler.ashx文件。自動生成的代碼我們注意到在ASHX文件中自動生成的代碼,定義了IHttpHandler介面的2個方法。最重要的方法是ProcessRequest(),無論是請求還是輸出,這個方法都會被調用到。你不應該修改任何默認繼承的介面成員。URL映射通常,使用一個新的URL替代舊的URL或者路徑是可行的。為了向後兼容和搜索引擎優化,在你的網站上,你也許想用新的處理程序代替一個舊的URL地址。用URL映射可以解決此問題。當然,你也可以用更複雜的路徑重寫方法。Web.config中的部分代碼<system.web><urlMappingsenabled="true"><addurl="~/Default.aspx"mappedUrl="~/Handler.ashx"/></urlMappings>……..</system.web>

以上代碼將自動將一個連接轉到另一個上面。當Default.aspx頁面被請求時,Handler.ashx文件將取而代之。這意味著:你的目錄默認頁面將自動導航到一般處理程序上。添加示例圖片在這裡,你也許會用ASHX文件處理圖片文件。在桌面或者網路上找一會你最喜歡的圖片,把它添加到你的項目中。例如,我選擇的圖片是"Flower1.png",下面我將在ASHX文件中使用這個圖片。修改Handler.ASHX文件你的Handler有2個方法,我們必須修改ProcessRequest()方法,可以修改文件的ContentType和輸出內容。通過下面類似的代碼可以修改你的圖片文件名和ContentType屬性。publicvoidProcessRequest(HttpContextcontext){context.Response.ContentType ="image/png";context.Response.WriteFile("~/images/ Flower1.png");}publicboolIsReusable{get{returnfalse;}}測試處理程序在本地測試ASHX文件。點擊網站綠色的運行按鈕。你將在瀏覽器上看到你的圖片文件。這是處理程序中輸出的圖片返回結果。

添加功能到目前位置,上面的例子是沒有任何作用的。主要就是讓我們通過ASHX處理一個圖片文件。你可以在ASHX文件添加任何邏輯代碼或者邏輯引用。開發者通常需要使用請求的查詢字元串集合。你可以像在ASPX文件中使用的方法一樣請求查詢字元串:Request.QueryString["file"]。

上面的代碼通過基於查詢字元串集合,收到請求然後返回不同的圖片文件。他將通過查詢字元串返回二個圖片中的一個。例如:URL = http://www.dotnetperls.com/?file=logoFile query string: logoFile written: Logo1.pngURL = http://www.dotnetperls.com/?file=flowerFile query string: flowerFile written: Flower1.png測試查詢字元串做了這麼多準備工作。開始測試吧!打開你的瀏覽器,在URL路徑上添加上面的查詢字元串。你會看到ASP.NET由Default.aspx頁面導航到Handler.ashx頁面。並且,他將通過獲取查詢變數返回適當的文件。用途這些代碼可以用作訪問者數量的計數器或者日誌推薦的數量計數器。由於瀏覽器和Bot的區別,這將比伺服器日誌提供更準確的訪問數量。性能你也許想知道,使用ASHX文件,是否會帶來一些性能的優勢或改變呢?ASHX文件並不複雜,而且不涉及更多事件的調用。正如你想像的那樣,一個請求處理10幾個事件比處理一個事件將消耗更多的性能。所以,在可能的情況下使用ASHX文件吧,他將會帶來一些性能的優勢。選擇處理程序那什麼時候用客戶端處理程序,什麼時候使用Web窗體文件呢?一般處理程序在處理二進位數據更有優勢,而Web窗體在做快速開發方面更好。控制樹在ASP.NET框架中,Web窗體使用一種稱為控制樹的概念(網頁都保存在一個對象模型中)。當你不需要客戶端的控制樹或者整個網站架構的時候,使用一般處理程序,這將會帶來更好的性能優勢和簡單的代碼調試。IsReusable 屬性我不知道IsReusable屬性在ASP.NET中的作用。通過閱讀表名,他能在不破壞反覆程序處理的情況下提高性能、減少內存壓力。總結在這篇文章中,教給你怎麼在自己的網站中使用ASHX自定義處理程序。通過修改後,能填充到更多重要的網站中。結合自定義查詢字元串的URL映射,可以大大簡化和優化你的網站後台代碼。附加:做好一個.aspx頁面。[html]view plaincopyprint?<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="Default.aspx.cs"Inherits="_Default"%><!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"><headrunat="server"><title></title></head><body><formid="form1"runat="server"><div><div><imgid="img"src="images/1.jpg"height="300px"/></div><ahref="#"onclick="GetImg(1)">1</a><ahref="#"onclick="GetImg(2)">2</a><ahref="#"onclick="GetImg(3)">3</a></div></form></body></html><scripttype="text/javascript">functionGetImg(index){varmyImg=document.getElementById("img");myImg.src="./imageHandle.ashx?id="+index;}</script>這個例子是這樣的,有三個鏈接,分別為1、2、3,點擊後顯示對應的圖片。


推薦閱讀:

精美比利時鉤花披肩的鉤法教程(青竹手工)|鉤針編織詳細教程區
似水流雲PS邊框圖文教程
箭步蹲,剪蹲教程
機縫拼布手機套詳細手作教程
【魔術教學】經典的撲克魔術教程

TAG:程序 | .NET | ASP.NET | 轉載 | 教程 | 處理 |