HttpHandle1

HttpHandler实现了类似于ISAPI Extention的功能,他处理请求(Request)的信息和发送响应(Response)。HttpHandler功能的实现通过实现IHttpHandler接口来达到。实际上,我们在编写ASP.Net页面时,ASP.Net页面所继承的基类——System.Web.UI.Page——也实现了HttpHandler接口,也是一个HttpHandler,看一下它的定义就知道了(C#):

public class Page : TemplateControl, IhttpHandler


接口IHttpHandler的定义如下:

interface IHttpHandler

{

void ProcessRequest(HttpContext ctx);

bool IsReuseable { get; }

}


接口中ProcessRequest是添加自己的代码,进行相应处理的地方。IsReuseable属性指明该HttpHandler的实现类是否需要缓存。

下面的示例展示了HttpHandler的基本使用:

1、建立一个名为MyNameSpace的工程,添加一个类,名称为MyHandler,代码如下:

例1:

namespace MyNameSpace

{

public class MyHandler : IHttpHandler

{

public void ProcessRequest(HttpContext ctx)

{

HttpResponse Response

Response.Write("This is my handler");}

public bool IsReusable

{

get { return true; }

}

}

}


2、将上面的代码编译,生成MyNameSpace.Dll文件;

3、建立一个新的WebApplication项目,或打开一个WebApplication项目,将文件MyNameSpace.Dll添加到项目的引用中,或复制到项目的bin目录下;

4、修改Web.Config,添加如下内容:

<configuration>   

   <system.web>

   <httpHndlers>

<add verb="*" path="*.aspx"

type=" MyNameSpace.MyHandr, MyNameSpace" />

      </httpHndlers>

</system.web>

</configuration>


配置文件中的选项说明:

· verb可以是"GET"或"POST",表示对GET或POST的请求进行处理。"*"表示对所有请求进行处理。

· Path指明对相应的文件进行处理,"*.aspx"表示对发给所有ASPX页面的请求进行处理。可以指明路径,如"/test/*.aspx",表明只对test目录下的ASPX文件进行处理。

· Type属性中,逗号前的字符串指明HttpHandler的实现类的类名,后面的字符串指明Dll文件的名称。

现在,请求项目中的任何ASPX页面,页面上显示的始终只有如下一行字:

This is my handler


因为,我们自定义的Handler截获了所有发向ASPX页面的请求,并且用自己的的方法来处理这些请求了。

为了使我们的ASPX页面能够顺利运行,我们需要修改Web.Config文件:

<configuration>   

    <system.web>

   <httpHndlers>

<add verb="*" path="*.foo"

type=" MyNameSpace.MyHandr,hander" />

      </httpHndlers>

</system.web>

</configuration>


为了让对后缀名为.foo的文件的请求能够被我们的Handler截获运行,我们还需要一些额外的工作。打开IIS的管理控制台,又键单击站点,选择"属性",跳出站点的属性对话框。选择主目录选项。如图3:

好了,我们现在可以在项目中添加一个.foo文件,当向该文件发送请求时,浏览器显示:

This is my handler


而对其他ASPX文件的访问不受影响。

posted on 2008-12-05 11:15  青春的虎子  阅读(297)  评论(0)    收藏  举报

导航