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

來源:互聯網
上載者:User

         你不想建立一個普通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=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頁面:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  <html xmlns="http://www.w3.org/1999/xhtml">  <head runat="server">      <title></title>  </head>  <body>      <form id="form1" runat="server">      <div>          <div>              <img id="img" src="images/1.jpg" height="300px" />          </div>          <a href="#" onclick="GetImg(1)">1</a>           <a href="#" onclick="GetImg(2)">2</a>           <a href="#" onclick="GetImg(3)">3</a>      </div>      </form>  </body>  </html>    <script type="text/javascript">      function GetImg(index) {          var myImg = document.getElementById('img');          myImg.src = './imageHandle.ashx?id=' + index;      }  </script> 

這個例子是這樣的,有三個連結,分別為1、2、3,點擊後顯示對應的圖片。


相關關鍵詞:
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.