在上一篇部落格中,提到一般處理常式真的不一般。這篇部落客要是給大家解惑。由於最近在做項目的過程中,用到了很多的一般處理常式,相信你也一定用到過,但是你真的瞭解它嗎?
一般處理常式的一般是相對於aspx頁面來說的,它介於請求與響應之間的處理常式。說白了就是去掉了前台appx HTML 頁面的cs部分,什麼請求都可以處理,實現IHttpHandler介面。
通過VS2012中建立一個一般處理常式將會產生兩個尾碼名的檔案.ashx和.ashx.cs。其中.ashx.cs對應的內容,如以下代碼:
?
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace web { /// <summary> /// Handler 的摘要說明 /// </summary> public class Handler : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; context.Response.Write("Hello World"); } public bool IsReusable { get { return false; } } } } |
從上面的代碼可以看到,一般處理常式實際上就是一個實現IHttpHandler介面的處理常式類,這個處理常式被ASP.NET直接在系統設定檔映射到了ashx副檔名的請求上。這樣,我們就不需要在設定檔中進行配置了。
因為不必繼承Page類,所以沒有那麼多的事件要處理,消耗資源少,效能比aspx高。
一般處理常式可以完成的功能很多,輸出HTML,效果跟aspx+cs是一樣的,還可以用來發送非html類或無需html代碼的資料等,比如文本、XML、圖片,甚至二進位檔案格式,還有最常用json資料格式等。
簡單的舉三個最常用的例子:
1、圖片過濾(防盜鏈)
2、圖片驗證碼
3、處理自訂尾碼名請求
這個三個例子的代碼,我通過轉載的部落格,為大家做一個詳細的介紹。
以往我們都是從功能的角度來學習和思考某個頁面怎樣用,隨著不斷學習的深入,我更加的認為應該從原理和本質認識和學習,從上面轉載的部落格為大家解決這個問題。