ASHX 一般處理程式
ASP.NET ASHX 一般處理程式教程
2011-10-17 15:57:48| 分類:|舉報|字號訂閱
寫在最前面:
你不想建立一個普通ASP.NET的Web窗體頁。而又要通過一個查詢字串返回一個動態的圖片、XML或者非HTML網頁。這是一個用C#程式語言編寫的使用ASHX(一般處理程式)的簡單教程。
簡介
首先,我們來回顧一下使用ASHX檔案的目的。也許我們想在URL中使用這個ASHX檔案動態的返回資料內容。我們使用的URL查詢字串如下
入門:怎麼新增一個ASHX檔案呢?
開啟你的ASP.NET網站,在網站上點選"新增新項"的選單,此時打開了"新增新項"視窗,選擇一般處理程式(Generic Handler),
自動生成的程式碼
我們注意到在ASHX檔案中自動生成的程式碼,定義了IHttpHandler介面的2個方法。最重要的方法是ProcessRequest(),無論是請求還是輸出,這個方法都會被呼叫到。你不應該修改任何預設繼承的介面成員。
URL對映
通常,使用一個新的URL替代舊的URL或者路徑是可行的。為了向後相容和搜尋引擎優化,在你的網站上,你也許想用新的處理程式代替一箇舊的URL地址。用URL對映可以解決此問題。當然,你也可以用更復雜的路徑重新方法。
Web.config中的部分程式碼
<system.web>
<
<addurl="~/Default.aspx"mappedUrl="~/Handler.ashx"/>
</urlMappings>
……..
</system.web>
以上程式碼將自動將一個連線轉到另一個上面。當Default.aspx頁面被請求時,Handler.ashx檔案將取而代之。這意味著:你的目錄預設頁面將自動導航到一般處理程式上。
新增示例圖片
在這裡,你也許會用ASHX檔案處理圖片檔案。在桌面或者網路上找一會你最喜歡的圖片,把它新增到你的專案中。例如,我選擇的圖片是"Flower1.png"
修改Handler.ASHX檔案
你的Handler有2個方法,我們必須修改ProcessRequest()方法,可以修改檔案的ContentType和輸出內容。通過下面類似的程式碼可以修改你的圖片檔名和ContentType屬性。
publicvoid ProcessRequest(HttpContext context)
{
context.Response.ContentType = "image/png";
context.Response.WriteFile("~/images/ Flower1.png");
}
publicbool IsReusable
{
get
{
returnfalse;
}
}
測試處理程式
在本地測試ASHX檔案。點選網站綠色的執行按鈕。你將在瀏覽器上看到你的圖片檔案。這是處理程式中輸出的圖片返回結果。
新增功能
到目前位置,上面的例子是沒有任何作用的。主要就是讓我們通過ASHX處理一個圖片檔案。你可以在ASHX檔案新增任何邏輯程式碼或者邏輯引用。開發者通常需要使用請求的查詢字串集合。你可以像在ASPX檔案中使用的方法一樣請求查詢字串:Request.QueryString["file"]。
上面的程式碼通過基於查詢字串集合,收到請求然後返回不同的圖片檔案。他將通過查詢字串返回二個圖片中的一個。
例如:
URL =http://www.dotnetperls.com/?file=logo
File querystring: logo
File written: Logo1.png
URL =http://www.dotnetperls.com/?file=flower
File query string: flower
File 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對映,可以大大簡化和優化你的網站後臺程式碼。