ASP.Net中自定义Http处理及应用之HttpHandler
2011-04-28 21:41
447 查看
在开发基于Microsoft IIS的应用时,开发者除了可以编写ASP程序外,还可以使用Visual C 等开发工具,开发ISAPI应用,以获取更为强大的功能。可以编写两种ISAPI扩展:一种是ISAPI Server Extention,另一种是ISAPI Filter,但是,ISAPI扩展应用的编写通常对开发者有比较高的要求,开发和部署的难度比较大。 在开发ASP.Net应用时,我们仍然可以编写ISAPI应用,以扩充IIS的功能,但是,ASP.Net为我们提供了另外一种选择——使用HTTP Handler 和HTTP Module。这是通过使用IHttpHandler 和 IHttpModule接口来实现的。HTTP Handler提供了类似于ISAPI Server Extention的功能,而HttpModule实现了类似于ISAPI Filter的功能,并且,比ISAPI,在开发和部署上都要简单的多。 应用HttpHandler和HttpModule,使应用程序可以与IIS Web服务器的低级别请求和响应服务交互。本文首先介绍HttpHandler和HttpModule的概念和基本使用方法,并介绍了一个应用HttpModule实现权限系统的案例。
加工:
httphandler ----> isapi 服务扩展
httpmodule -----> isaspi 过滤
注:(isapi: internet server application interface 因特网服务程序接口)
使用httpmodule 可以实现权限和URL重写等于IIS的低级别交互,同时可以将cookie指定作用于全域。
HTTP 处理管道的基本模型
要对HttpModule和IHttpHandler进行研究,必须先对ASP.Net的处理管道有一个了解。
在ASP.Net应用程序中,系统使用一组相关的类,通过一定的顺序来处理客户端的请求(Request),ASP.NET应用程序的处理模式可称之为HTTP处理管道。
HttpModule和IhttpHandler就是这个处理管道上的两个处理环节。 HTTP处理管道中的类在System.Web名称空间中定义,
主要有以下类型:
· HttpWorkerRequest 抽象类定义了ASP.Net页面处理请求的基本方法;
· HttpRuntime 提供了处理应用的一组服务;
· HttpContext 保存了处理一次请求的所有相关上下文信息(如:request response);
· HttpApplicationFactory 提供相关目录的应用程序;
· HttpApplication 定义了所有ASP.Net应用程序的通用的方法、属性和事件。这个类也是在用户在global.asax文件中定义的应用的基类;
· Modules 处理请求前和响应后的事件;
· HandlerFactories 提供应用程序中的Handlers;
· Handlers 处理请求和响应。
HTTP处理管道的模型如下:
interface IHttpHandler
<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:
interface IHttpHandlerFactory
public class BasicHandlerFactory : IHttpHandlerFactory
<configuration>
<system.web>
<httpHandlers>
<add verb="POST" path="*.foo"
type="MyNamespace.BasicHandlerFactory, MyAssembly" />
</httpHandlers>
</system.web>
</configuration>
namespace MyNameSpace
加工:
在实际使用中,经常使用ashx(一般处理文件,功能相当于*.cs 但是可以使用基于http协议的访问!)extends IHttpHandler 来实现一些功能,如返回HTML,XML 等等,通常用于异步操作,即和ajax结合。典型的应有就是Prototype和jQuery。
加工:
httphandler ----> isapi 服务扩展
httpmodule -----> isaspi 过滤
注:(isapi: internet server application interface 因特网服务程序接口)
使用httpmodule 可以实现权限和URL重写等于IIS的低级别交互,同时可以将cookie指定作用于全域。
HTTP 处理管道的基本模型
要对HttpModule和IHttpHandler进行研究,必须先对ASP.Net的处理管道有一个了解。
在ASP.Net应用程序中,系统使用一组相关的类,通过一定的顺序来处理客户端的请求(Request),ASP.NET应用程序的处理模式可称之为HTTP处理管道。
HttpModule和IhttpHandler就是这个处理管道上的两个处理环节。 HTTP处理管道中的类在System.Web名称空间中定义,
主要有以下类型:
· HttpWorkerRequest 抽象类定义了ASP.Net页面处理请求的基本方法;
· HttpRuntime 提供了处理应用的一组服务;
· HttpContext 保存了处理一次请求的所有相关上下文信息(如:request response);
· HttpApplicationFactory 提供相关目录的应用程序;
· HttpApplication 定义了所有ASP.Net应用程序的通用的方法、属性和事件。这个类也是在用户在global.asax文件中定义的应用的基类;
· Modules 处理请求前和响应后的事件;
· HandlerFactories 提供应用程序中的Handlers;
· Handlers 处理请求和响应。
HTTP处理管道的模型如下:
interface IHttpHandler
<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:
interface IHttpHandlerFactory
public class BasicHandlerFactory : IHttpHandlerFactory
<configuration>
<system.web>
<httpHandlers>
<add verb="POST" path="*.foo"
type="MyNamespace.BasicHandlerFactory, MyAssembly" />
</httpHandlers>
</system.web>
</configuration>
namespace MyNameSpace
加工:
在实际使用中,经常使用ashx(一般处理文件,功能相当于*.cs 但是可以使用基于http协议的访问!)extends IHttpHandler 来实现一些功能,如返回HTML,XML 等等,通常用于异步操作,即和ajax结合。典型的应有就是Prototype和jQuery。
相关文章推荐
- ASP.Net中自定义Http处理及应用之HttpHandler
- ASP.Net中自定义Http处理及应用之HttpHandler
- ASP.Net中自定义Http处理及应用之HttpHandler篇
- ASP.Net中自定义Http处理及应用之HttpModule篇
- ASP.Net中自定义Http处理及应用之HttpModule篇
- ASP.Net中自定义Http处理及应用之HttpModule篇
- ASP.Net中自定义Http处理及应用之HttpHandler篇
- ASP.Net中自定义Http处理及其应用(转:孙亚民)
- ASP.Net中自定义Http处理及应用之HttpModule篇(转)
- ASP.Net中自定义Http处理及应用之HttpHandler篇 1
- ASP.Net中自定义Http处理及应用之HttpModule篇
- ASP.Net中自定义Http处理及应用之HttpModule篇
- ASP.Net中自定义Http处理及应用之HttpHandler篇
- ASP.Net中自定义Http处理及应用之HttpModule篇
- 应用HttpHandler, Json, JQuery, ASP.Net UserControl等技术处理 Ajax 的解决方案
- ASP.Net中自定义Http处理及应用之HttpModule篇
- ASP.Net中自定义Http处理及应用之HttpModule篇
- ASP.Net中自定义Http处理及应用之HttpHandler篇
- ASP.Net中自定义Http处理及应用之HttpModule篇
- ASP.Net中自定义Http处理及应用之HttpHandler篇(转自:http://7880.com/Info/Article-2b783c20.html)