|
你不想創(chuàng)建一個(gè)普通ASP.NET的Web窗體頁(yè)。而又要通過一個(gè)查詢字符串返回一個(gè)動(dòng)態(tài)的圖片、XML或者非HTML網(wǎng)頁(yè)。這是一個(gè)用C#編程語(yǔ)言編寫的使用ASHX(一般處理程序)的簡(jiǎn)單教程。
簡(jiǎn)介首先,我們來(lái)回顧一下使用ASHX文件的目的。也許我們想在URL中使用這個(gè)ASHX文件動(dòng)態(tài)的返回?cái)?shù)據(jù)內(nèi)容。我們使用的URL查詢字符串如下:http://www./?file=name. 入門:怎么添加一個(gè)ASHX文件呢?打開你的ASP.NET網(wǎng)站,在網(wǎng)站上點(diǎn)擊"添加新項(xiàng)"的菜單,此時(shí)打開了"添加新項(xiàng)"窗口,選擇一般處理程序(Generic Handler),這時(shí)你將看到一個(gè)有一些代碼的Handler.ashx文件。 自動(dòng)生成的代碼我們注意到在ASHX文件中自動(dòng)生成的代碼,定義了IHttpHandler接口的2個(gè)方法。最重要的方法是ProcessRequest(),無(wú)論是請(qǐng)求還是輸出,這個(gè)方法都會(huì)被調(diào)用到。你不應(yīng)該修改任何默認(rèn)繼承的接口成員。 URL映射通常,使用一個(gè)新的URL替代舊的URL或者路徑是可行的。為了向后兼容和搜索引擎優(yōu)化,在你的網(wǎng)站上,你也許想用新的處理程序代替一個(gè)舊的URL地址。用URL映射可以解決此問題。當(dāng)然,你也可以用更復(fù)雜的路徑重寫方法。 Web.config中的部分代碼 <system.web> <urlMappings enabled="true"> <add url="~/Default.aspx" mappedUrl="~/Handler.ashx"/> </urlMappings> …….. </system.web>
以上代碼將自動(dòng)將一個(gè)連接轉(zhuǎn)到另一個(gè)上面。當(dāng)Default.aspx頁(yè)面被請(qǐng)求時(shí),Handler.ashx文件將取而代之。這意味著:你的目錄默認(rèn)頁(yè)面將自動(dòng)導(dǎo)航到一般處理程序上。 添加示例圖片在這里,你也許會(huì)用ASHX文件處理圖片文件。在桌面或者網(wǎng)絡(luò)上找一會(huì)你最喜歡的圖片,把它添加到你的項(xiàng)目中。例如,我選擇的圖片是"Flower1.png",下面我將在ASHX文件中使用這個(gè)圖片。 修改Handler.ASHX文件你的Handler有2個(gè)方法,我們必須修改ProcessRequest()方法,可以修改文件的ContentType和輸出內(nèi)容。通過下面類似的代碼可以修改你的圖片文件名和ContentType屬性。 public void ProcessRequest(HttpContext context) { context.Response.ContentType = "image/png"; context.Response.WriteFile("~/images/ Flower1.png"); }
public bool IsReusable { get { return false; } } 測(cè)試處理程序在本地測(cè)試ASHX文件。點(diǎn)擊網(wǎng)站綠色的運(yùn)行按鈕。你將在瀏覽器上看到你的圖片文件。這是處理程序中輸出的圖片返回結(jié)果。
添加功能到目前位置,上面的例子是沒有任何作用的。主要就是讓我們通過ASHX處理一個(gè)圖片文件。你可以在ASHX文件添加任何邏輯代碼或者邏輯引用。開發(fā)者通常需要使用請(qǐng)求的查詢字符串集合。你可以像在ASPX文件中使用的方法一樣請(qǐng)求查詢字符串:Request.QueryString["file"]。
上面的代碼通過基于查詢字符串集合,收到請(qǐng)求然后返回不同的圖片文件。他將通過查詢字符串返回二個(gè)圖片中的一個(gè)。 例如: URL = http://www./?file=logo File query string: logo File written: Logo1.png URL = http://www./?file=flower File query string: flower File written: Flower1.png 測(cè)試查詢字符串做了這么多準(zhǔn)備工作。開始測(cè)試吧!打開你的瀏覽器,在URL路徑上添加上面的查詢字符串。你會(huì)看到ASP.NET由Default.aspx頁(yè)面導(dǎo)航到Handler.ashx頁(yè)面。并且,他將通過獲取查詢變量返回適當(dāng)?shù)奈募?/span> 用途這些代碼可以用作訪問者數(shù)量的計(jì)數(shù)器或者日志推薦的數(shù)量計(jì)數(shù)器。由于瀏覽器和Bot的區(qū)別,這將比服務(wù)器日志提供更準(zhǔn)確的訪問數(shù)量。 性能你也許想知道,使用ASHX文件,是否會(huì)帶來(lái)一些性能的優(yōu)勢(shì)或改變呢?ASHX文件并不復(fù)雜,而且不涉及更多事件的調(diào)用。正如你想象的那樣,一個(gè)請(qǐng)求處理10幾個(gè)事件比處理一個(gè)事件將消耗更多的性能。所以,在可能的情況下使用ASHX文件吧,他將會(huì)帶來(lái)一些性能的優(yōu)勢(shì)。 選擇處理程序
控制樹在ASP.NET框架中,Web窗體使用一種稱為控制樹的概念(網(wǎng)頁(yè)都保存在一個(gè)對(duì)象模型中)。當(dāng)你不需要客戶端的控制樹或者整個(gè)網(wǎng)站架構(gòu)的時(shí)候,使用一般處理程序,這將會(huì)帶來(lái)更好的性能優(yōu)勢(shì)和簡(jiǎn)單的代碼調(diào)試。
IsReusable 屬性我不知道IsReusable屬性在ASP.NET中的作用。通過閱讀表名,他能在不破壞反復(fù)程序處理的情況下提高性能、減少內(nèi)存壓力。
總結(jié)在這篇文章中,教給你怎么在自己的網(wǎng)站中使用ASHX自定義處理程序。通過修改后,能填充到更多重要的網(wǎng)站中。結(jié)合自定義查詢字符串的URL映射,可以大大簡(jiǎn)化和優(yōu)化你的網(wǎng)站后臺(tái)代碼。 附加: 做好一個(gè).aspx頁(yè)面。
|
|
|