HttpHandlers 和 HttpModules 通過擴展原始的頁面框架,提供了用於處理請求和響應的兩種途徑。HttpHanders的主要目的是處理對某種特定文件或者在URL中對某個文件路徑的請求,而HttpModule則主要被用於在最開始的階段處理一個請求以及在最後階段處理一個響應。
HttpHandlers是指實現了IHttpHandler接口的類。它們在ProcessRequest()方法中獲得對當前HttpContext對象的引用,並能依靠HttpContext對象的屬性來執行代碼。典型的例子是,HttpHandler分析來自Request屬性(對象)的數據並通過Response屬性(對象)發送回某些東西。HttpHandler同時實現了一個IsReusable屬性,它告訴Asp.net是否類的同一個實例能夠用於處理併發(subsequent)的請求
第一步:首先新建一個類庫項目:
using System;
using System.Web;
public class Handler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
context.Response.Write("aaa");
}
public bool IsReusable
{
get
{
return false;
}
}
}
第二步:在web項目中引用此dll
第三步:在Web.Config中進行配置,type參數爲:命名空間名.類名,程序集名
<httpHandlers>
<add verb="*" path="*.aspx" type="Handler,ClassLibrary1" />
</httpHandlers>
好了,現在你不論訪問哪一個aspx文件,返回的都是aaa了!
HttpModules通過添加事件處理器到應用程序的事件,從而代碼可以同應用程序進行交互。這些類都必須實現IHttpModule接口。Init()方法爲我們提供了對一個應用程序的引用,在那個方法中我們可以綁定事件處理器到應用程序的事件上。事件處理器通過實現基本的事件處理器標記式來同應用程序進行交互。HttpModule也實現了一個Dispose()方法,它被用於在應用程序結束時執行必需的清理工作。
第一步:首先新建一個類庫項目:
namespace ClassLibrary1
{
class Class2:IHttpModule
{
public void Dispose()
{
//throw new Exception("The method or operation is not implemented.");
}
public void Init(HttpApplication context)
{
context.Context.Cache["a"] = "a";
}
}
}
第二步:在Web應用程序中添加此引用
第三步:在Web.Config中進行配置,name隨便起,type格式爲:命名空間名.類名
<httpModules>
<add name="a" type="ClassLibrary1.Class2"/>
</httpModules>
第四步:在web應用程序中驗證
if (Cache["a"] != null)
{
Response.Write(Cache["a"].ToString());
}
else
{
Response.Write("no");
}
可以看到,打印的是a
其實,HttpModule是在HttpHandler之前就響應的,所以可以影響後者。