天天看點

ASHX 一般處理程式

ASP.NET ASHX 一般處理程式教程  

2011-10-17 15:57:48|  分類: C# .net 工具|舉報|字号 訂閱

寫在最前面:

本文是翻譯的http://www.dotnetperls.com/ashx的部落格文章。目的是為了加深自己對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>

<urlMappings enabled="true">

<add url="~/Default.aspx" mappedUrl="~/Handler.ashx"/>

</urlMappings>

……..

</system.web>

以上代碼将自動将一個連接配接轉到另一個上面。當Default.aspx頁面被請求時,Handler.ashx檔案将取而代之。這意味着:你的目錄預設頁面将自動導航到一般處理程式上。

添加示例圖檔

在這裡,你也許會用ASHX檔案處理圖檔檔案。在桌面或者網絡上找一會你最喜歡的圖檔,把它添加到你的項目中。例如,我選擇的圖檔是"Flower1.png",下面我将在ASHX檔案中使用這個圖檔。

修改Handler.ASHX檔案

你的Handler有2個方法,我們必須修改ProcessRequest()方法,可以修改檔案的ContentType和輸出内容。通過下面類似的代碼可以修改你的圖檔檔案名和ContentType屬性。

public void ProcessRequest(HttpContext context)

{

context.Response.ContentType = "image/png";

context.Response.WriteFile("~/images/ Flower1.png");

}

public bool IsReusable

{

get

{

return false;

}

}

測試處理程式

在本地測試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映射,可以大大簡化和優化你的網站背景代碼。

繼續閱讀