開始學習ASP.net——如何利用ASP.net動態輸出圖片

來源:互聯網
上載者:User
1.引言

做ASP.net開發大部分時間是在動態輸出html檔案,通過<img src=xxx.jpg />串連靜態圖片檔案。所做的編程工作也大部分是在aspx檔案裡添加代碼。其實所作的就是完善Page類得衍生類別。因為所有的aspx對應的類都是繼承自Page。而Page類本身負責完成整個頁面生存周期的管理工作。但有時候,輸出並不需要複雜的html頁面,而是簡單的圖片,如驗證碼就是個非常典型的例子。

2請求執行流程與通用處理常式

HttpApplication根據web.cofig中處理常式的映射關係,根據url找到對應的實現了IHttpHandler的類,並執行個體化後,調用類的ProcessRequest()方法,完成渲染輸出。由於ASP.netWeb程式的大部分工作是輸出html,所以微軟已經設計好了一個實現了IHttpHandler介面的Page類來處理此項任務。而對於其他的輸出,片,壓縮檔,純文字,xls檔案等等,微軟沒有單獨提供處理常式,而是通過提供一種叫做“通用處理常式”的ashx來完成,微軟做的是已經把ashx檔案對應工作處理好了,我們只需要完成IHttpHandler的介面函數就可以了。

 

3輸出圖片的步驟

在VS2010中,右鍵網站項目,選擇添加新項-->一般處理常式,會增加一個.ashx檔案,內容如下:

<%@ WebHandler Language="C#" Class="Handler" %></p><p>using System;<br />using System.Web;</p><p>public class Handler : IHttpHandler {<br /> private HttpResponse Response;<br /> public void ProcessRequest (HttpContext context)<br /> {<br /> context.Response.ContentType="text/plain";<br /> context.Response.Write("Hello World");<br /> }</p><p> public bool IsReusable<br /> {<br /> get<br /> {<br /> return false;<br /> }<br /> }</p><p>}

可以看到,代碼中定義了一個Handler類,實現了IHttpHandler介面。我們需要做的就是完善ProcessRequest這個介面函數。下面代碼輸出一個簡單的矩形映像。

<%@ WebHandler Language="C#" Class="Handler" %></p><p>using System;<br />using System.Web;</p><p>public class Handler : IHttpHandler {<br /> private HttpResponse Response;<br /> public void ProcessRequest (HttpContext context)<br /> {<br /> context.Response.ContentType = "image/jpeg";<br /> System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(100, 100);<br /> System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap);<br /> //繪製<br /> g.Clear(System.Drawing.Color.Black);<br /> g.DrawRectangle(System.Drawing.Pens.Red, 0, 0, 50, 50);</p><p> g.Dispose();<br /> bitmap.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);<br /> bitmap.Dispose();<br /> }</p><p> public bool IsReusable<br /> {<br /> get<br /> {<br /> return false;<br /> }<br /> }</p><p>}

如果需要在其他html文檔中顯示動態產生的圖片,那麼只要在html文檔中加入如下代碼即可:

<img src="xxx.ashx" />

4 輸出其他類型

利用ashx(active server handler extend),我們可以實現輸出任何http協議規範中的文件類型。當然也包括html,如果你不想使用複雜的aspx,完全可以自己利用ashx完成簡單html的輸出任務。不過也就失去了Page類的生命週期管理的便利性,還是看具體要求來決定是否使用Page類(aspx)。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.