利用 IHttpHandler 自定义 HTTP 处理程序
本文內(nèi)容
- 引入
- IHttpHandler 概述
- 演示創(chuàng)建自定義 HTTP 處理程序
- ??? 創(chuàng)建自定義 HTTP 處理程序
- ??? 映射文件擴(kuò)展名
- ??? 測試自定義 HTTP 處理程序
- 參考資料
?
引入
當(dāng)新建一個(gè)名為 WebForm1 的 .aspx 文件后,這個(gè)頁面相應(yīng)的 .aspx.cs 文件內(nèi)容如下:
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) { ? } } }任何人對(duì)這個(gè)頁面再熟悉不過。但更進(jìn)一步,這個(gè)后臺(tái)文件繼承 System.Web.UI.Page 類,而該類又繼承 System.Web.UI.TemplateControl 類和 System.Web.IHttpHandler 接口。值得注意的是 IHttpHandler。
?
本文在 VS 2008 和 IIS 6 環(huán)境下概述如何利用 IHttpHandler 自定義 HTTP 處理程序。
本文重在工程實(shí)踐,以實(shí)踐看理論,這多少符合點(diǎn)參加工作的人實(shí)際情況。我是比較討厭大段大段的文字描述和理論的。雖然寫得簡單,但若深究下去涉及的問題實(shí)在很多,隨便寫點(diǎn)什么,都可以成為專門的主題。
在網(wǎng)上或是群里看到太多人問得問題,一是自己不思考,稍微遇到點(diǎn)問題,就迫切尋求他人幫助;二是基礎(chǔ)太差,知識(shí)量不夠,或是知道的過于膚淺。這些都是阻礙自己進(jìn)步的巨大障礙。
在本文的描述中,希望能體會(huì)、意識(shí)到 IHttpHandler 能做什么、能為你的項(xiàng)目做什么。
學(xué)習(xí)的過程不能一蹴而就,起初你只是知道一個(gè)個(gè)信息點(diǎn),一個(gè)個(gè)實(shí)現(xiàn)方式,但若堅(jiān)持下去,認(rèn)真思考它們內(nèi)在的東西,最終這些信息在你腦中會(huì)形成一個(gè)體系。
?
IHttpHandler 概述
IHttpHandler 是 ASP.NET 提供一個(gè)底層的請(qǐng)求/響應(yīng) API,使開發(fā)人員可以利用 .NET Framework 為到來的 HTTP 請(qǐng)求服務(wù)。因此,你可以創(chuàng)建自己的 HTTP 處理程序,將自定義輸出呈現(xiàn)給瀏覽器。
ASP.NET HTTP 處理程序是響應(yīng)對(duì) Web 應(yīng)用程序的請(qǐng)求而運(yùn)行的過程。最常見的處理程序是處理 .aspx 文件的 ASP.NET 頁處理程序。用戶請(qǐng)求 .aspx 文件時(shí),頁面通過頁處理程序來處理請(qǐng)求。
自定義 HTTP 處理程序通常具有以下用途:
- RSS 源。若要為網(wǎng)站創(chuàng)建 RSS 源,可以創(chuàng)建一個(gè)可發(fā)出 RSS 格式 XML 處理程序。然后將文件擴(kuò)展名,如 .rss,綁定你自定義的處理程序。當(dāng)用戶向站點(diǎn)發(fā)送以 .rss 結(jié)尾的請(qǐng)求時(shí),ASP.NET 將調(diào)用你自定義的處理程序來處理該請(qǐng)求。
- 圖像服務(wù)器。如果希望 Web 應(yīng)用程序能夠提供不同大小的圖像,可以編寫一個(gè)自定義處理程序來調(diào)整圖像大小,將調(diào)整后的圖像作為處理程序的響應(yīng)發(fā)送給用戶。
除了 ASP.NET 頁面處理程序外,ASP.NET 還有其他幾種內(nèi)置的處理程序。如下表所示:
| 處理程序 | 說明 |
| ASP.NET 頁處理程序 (*.aspx) | 用于所有 ASP.NET 頁的默認(rèn) HTTP 處理程序。 |
| Web 服務(wù)處理程序 (*.asmx) | 在 ASP.NET 中作為 .asmx 文件創(chuàng)建的 Web 服務(wù)頁的默認(rèn) HTTP 處理程序。 |
| 泛型 Web 處理程序 (*.ashx) | 不含 UI 和包括 @ WebHandler 指令的所有 Web 處理程序的默認(rèn) HTTP 處理程序。 |
| 跟蹤處理程序 (trace.axd) | 顯示當(dāng)前頁跟蹤信息的處理程序。 |
?
演示創(chuàng)建自定義 HTTP 處理程序
創(chuàng)建自定義 HTTP 處理程序
若要?jiǎng)?chuàng)建自定義 HTTP 處理程序,需要?jiǎng)?chuàng)建實(shí)現(xiàn) IHttpHandler 接口的類。這是一個(gè)同步處理程序(實(shí)現(xiàn) IHttpAsyncHandler 可以創(chuàng)建一個(gè)異步處理程序,兩種處理程序接口都要求您實(shí)現(xiàn) IsReusable 屬性和 ProcessRequest 方法)。
- IsReusable 屬性指定 IHttpHandlerFactory 對(duì)象(實(shí)際調(diào)用適當(dāng)處理程序的對(duì)象)是否可以將處理程序放置在池中,并且重新使用它以提高性能。如果處理程序不能放在池中,則在每次需要處理程序時(shí)工廠都必須創(chuàng)建處理程序的新實(shí)例。
- ProcessRequest 方法負(fù)責(zé)處理單個(gè) HTTP 請(qǐng)求。
HTTP 處理程序有權(quán)訪問應(yīng)用程序上下文。其中包括請(qǐng)求用戶的標(biāo)識(shí)(如果已知)、應(yīng)用程序狀態(tài)和會(huì)話信息。當(dāng)請(qǐng)求 HTTP 處理程序時(shí),ASP.NET 將調(diào)用相應(yīng)處理程序的 ProcessRequest 方法。您在處理程序的 ProcessRequest 方法中編寫的代碼將創(chuàng)建一個(gè)響應(yīng),此響應(yīng)隨后發(fā)送回請(qǐng)求瀏覽器。
如下所示創(chuàng)建一個(gè)名為 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; } } } }映射文件擴(kuò)展名
HelloWorldHandler 處理程序可以響應(yīng)尚未在 IIS 和 ASP.NET 中映射的任何文件擴(kuò)展名。
為了使 ASP.NET 了解為你的自定義文件擴(kuò)展名使用哪個(gè)處理程序,在 IIS 中必須將該擴(kuò)展名映射到 ASP.NET。然后在應(yīng)用程序中必須將該擴(kuò)展名映射到自定義處理程序。
如下所示:
<httpHandlers> <add verb="*" path="*.sample" type="HttpHandlerDemo.HelloWorldHandler"/> </httpHandlers>測試自定義 HTTP 處理程序
這樣,當(dāng)你輸入 http://localhost/mytest.sample,任何以 .sample 結(jié)尾的請(qǐng)求時(shí),都會(huì)調(diào)用 HelloWorldHandler 處理程序。
運(yùn)行結(jié)果:
?
參考資料
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
轉(zhuǎn)載于:https://www.cnblogs.com/liuning8023/archive/2011/11/29/2268445.html
總結(jié)
以上是生活随笔為你收集整理的利用 IHttpHandler 自定义 HTTP 处理程序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 帮盖尔优化SQL-----子查询优化的经
- 下一篇: 《JavaScript高级程序设计》阅读