利用 IHttpHandler 自定义 HTTP 处理程序
本文內容
- 引入
- IHttpHandler 概述
- 演示創建自定義 HTTP 處理程序
- ??? 創建自定義 HTTP 處理程序
- ??? 映射文件擴展名
- ??? 測試自定義 HTTP 處理程序
- 參考資料
?
引入
當新建一個名為 WebForm1 的 .aspx 文件后,這個頁面相應的 .aspx.cs 文件內容如下:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; ? namespace HttpHandlerDemo { public partial class WebForm1 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { ? } } }任何人對這個頁面再熟悉不過。但更進一步,這個后臺文件繼承 System.Web.UI.Page 類,而該類又繼承 System.Web.UI.TemplateControl 類和 System.Web.IHttpHandler 接口。值得注意的是 IHttpHandler。
?
本文在 VS 2008 和 IIS 6 環境下概述如何利用 IHttpHandler 自定義 HTTP 處理程序。
本文重在工程實踐,以實踐看理論,這多少符合點參加工作的人實際情況。我是比較討厭大段大段的文字描述和理論的。雖然寫得簡單,但若深究下去涉及的問題實在很多,隨便寫點什么,都可以成為專門的主題。
在網上或是群里看到太多人問得問題,一是自己不思考,稍微遇到點問題,就迫切尋求他人幫助;二是基礎太差,知識量不夠,或是知道的過于膚淺。這些都是阻礙自己進步的巨大障礙。
在本文的描述中,希望能體會、意識到 IHttpHandler 能做什么、能為你的項目做什么。
學習的過程不能一蹴而就,起初你只是知道一個個信息點,一個個實現方式,但若堅持下去,認真思考它們內在的東西,最終這些信息在你腦中會形成一個體系。
?
IHttpHandler 概述
IHttpHandler 是 ASP.NET 提供一個底層的請求/響應 API,使開發人員可以利用 .NET Framework 為到來的 HTTP 請求服務。因此,你可以創建自己的 HTTP 處理程序,將自定義輸出呈現給瀏覽器。
ASP.NET HTTP 處理程序是響應對 Web 應用程序的請求而運行的過程。最常見的處理程序是處理 .aspx 文件的 ASP.NET 頁處理程序。用戶請求 .aspx 文件時,頁面通過頁處理程序來處理請求。
自定義 HTTP 處理程序通常具有以下用途:
- RSS 源。若要為網站創建 RSS 源,可以創建一個可發出 RSS 格式 XML 處理程序。然后將文件擴展名,如 .rss,綁定你自定義的處理程序。當用戶向站點發送以 .rss 結尾的請求時,ASP.NET 將調用你自定義的處理程序來處理該請求。
- 圖像服務器。如果希望 Web 應用程序能夠提供不同大小的圖像,可以編寫一個自定義處理程序來調整圖像大小,將調整后的圖像作為處理程序的響應發送給用戶。
除了 ASP.NET 頁面處理程序外,ASP.NET 還有其他幾種內置的處理程序。如下表所示:
| 處理程序 | 說明 |
| ASP.NET 頁處理程序 (*.aspx) | 用于所有 ASP.NET 頁的默認 HTTP 處理程序。 |
| Web 服務處理程序 (*.asmx) | 在 ASP.NET 中作為 .asmx 文件創建的 Web 服務頁的默認 HTTP 處理程序。 |
| 泛型 Web 處理程序 (*.ashx) | 不含 UI 和包括 @ WebHandler 指令的所有 Web 處理程序的默認 HTTP 處理程序。 |
| 跟蹤處理程序 (trace.axd) | 顯示當前頁跟蹤信息的處理程序。 |
?
演示創建自定義 HTTP 處理程序
創建自定義 HTTP 處理程序
若要創建自定義 HTTP 處理程序,需要創建實現 IHttpHandler 接口的類。這是一個同步處理程序(實現 IHttpAsyncHandler 可以創建一個異步處理程序,兩種處理程序接口都要求您實現 IsReusable 屬性和 ProcessRequest 方法)。
- IsReusable 屬性指定 IHttpHandlerFactory 對象(實際調用適當處理程序的對象)是否可以將處理程序放置在池中,并且重新使用它以提高性能。如果處理程序不能放在池中,則在每次需要處理程序時工廠都必須創建處理程序的新實例。
- ProcessRequest 方法負責處理單個 HTTP 請求。
HTTP 處理程序有權訪問應用程序上下文。其中包括請求用戶的標識(如果已知)、應用程序狀態和會話信息。當請求 HTTP 處理程序時,ASP.NET 將調用相應處理程序的 ProcessRequest 方法。您在處理程序的 ProcessRequest 方法中編寫的代碼將創建一個響應,此響應隨后發送回請求瀏覽器。
如下所示創建一個名為 HelloWorldHandler 的處理程序:
using System; using System.Web; ? namespace HttpHandlerDemo { public class HelloWorldHandler : IHttpHandler { public void ProcessRequest(HttpContext context) { HttpRequest Request = context.Request; HttpResponse Response = context.Response; Response.Write("<html>"); Response.Write("<body>"); Response.Write("<h1>Hello from a synchronous custom HTTP handler.</h1>"); Response.Write("</body>"); Response.Write("</html>"); } ? public bool IsReusable { get { return true; } } } }映射文件擴展名
HelloWorldHandler 處理程序可以響應尚未在 IIS 和 ASP.NET 中映射的任何文件擴展名。
為了使 ASP.NET 了解為你的自定義文件擴展名使用哪個處理程序,在 IIS 中必須將該擴展名映射到 ASP.NET。然后在應用程序中必須將該擴展名映射到自定義處理程序。
如下所示:
<httpHandlers> <add verb="*" path="*.sample" type="HttpHandlerDemo.HelloWorldHandler"/> </httpHandlers>測試自定義 HTTP 處理程序
這樣,當你輸入 http://localhost/mytest.sample,任何以 .sample 結尾的請求時,都會調用 HelloWorldHandler 處理程序。
運行結果:
?
參考資料
MSDN HTTP 處理程序和 HTTP 模塊概述 http://msdn.microsoft.com/zh-cn/library/bb398986(v=VS.90).aspx
.NET Framework IHttpHandler http://msdn.microsoft.com/zh-cn/library/system.web.ihttphandler(v=VS.90).aspx
?
下載 Demo
轉載于:https://www.cnblogs.com/liuning8023/archive/2011/11/29/2268445.html
總結
以上是生活随笔為你收集整理的利用 IHttpHandler 自定义 HTTP 处理程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 帮盖尔优化SQL-----子查询优化的经
- 下一篇: 换底板2-之核心板