`
zendj
  • 浏览: 115746 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

ASP.Net中自定义Http处理及应用

阅读更多

ASP.Net中自定义Http处理及应用

www.itonline.gd.cn 2003-12-11



在开发基于MicrosoftIIS的应用时,开发者除了可以编写ASP程序外,还可以使用VisualC++等开发工具,开发ISAPI应用,以获取更为强大的功能。可以编写两种ISAPI扩展:一种是ISAPIServerExtention,另一种是ISAPIFilter,但是,ISAPI扩展应用的编写通常对开发者有比较高的要求,开发和部署的难度比较大。在开发ASP.Net应用时,我们仍然可以编写ISAPI应用,以扩充IIS的功能,但是,ASP.Net为我们提供了另外一种选择——使用HTTPHandler和HTTPModule。这是通过使用IHttpHandler和IHttpModule接口来实现的。HTTPHandler提供了类似于ISAPIServerExtention的功能,而HttpModule实现了类似于ISAPIFilter的功能,并且,比ISAPI,在开发和部署上都要简单的多。应用HttpHandler和HttpModule,使应用程序可以与IISWeb服务器的低级别请求和响应服务交互。本文首先介绍HttpHandler和HttpModule的概念和基本使用方法,并介绍了一个应用HttpModule实现权限系统的案例。
HTTP处理管道的基本模型

  要对HttpModule和IHttpHandler进行研究,必须先对ASP.Net的处理管道有一个了解。在ASP.Net应用程序中,系统使用一组相关的类,通过一定的顺序来处理客户端的请求(Request),ASP.NET应用程序的处理模式可称之为HTTP处理管道。HttpModule和IhttpHandler就是这个处理管道上的两个处理环节。HTTP处理管道中的类在System.Web名称空间中定义,主要有以下类型:·
HttpWorkerRequest抽象类定义了ASP.Net页面处理请求的基本方法;·HttpRuntime提供了处理应用的一组服务;·HttpContext保存了处理一次请求的所有相关上下文信息;·HttpApplicationFactory提供相关目录的应用程序;·HttpApplication定义了所有ASP.Net应用程序的通用的方法、属性和事件。这个类也是在用户在global.asax文件中定义的应用的基类;·Modules处理请求前和响应后的事件;·HandlerFactories提供应用程序中的Handlers;·Handlers处理请求和响应。HTTP处理管道的模型如下:

图1:HTTP处理管道
  在Windows平台上,HTTPPipline需要IIS的支持。为了运行ASP.NET应用,IIS需要以下两个文件:ASPNET_ISAPI.DLL和ASPNET_WP.EXE·ASPNET_ISAPI.DLL是一个ISAPIExtention他将发向IIS的请转交ASPNET_WP.EXE处理·ASPNET_WP.EXE使用HttpRuntime对请求进行具体处理处理的过程可以用图表示如下:

图2:IIS上的HTTP处理管道

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

  接口IHttpHandler的定义如下:
interfaceIHttpHandler
{
voidProcessRequest(HttpContextctx);
boolIsReuseable{get;}
}

  接口中ProcessRequest是添加自己的代码,进行相应处理的地方。IsReuseable属性指明该HttpHandler的实现类是否需要缓存。下面的示例展示了HttpHandler的基本使用:1、建立一个名为MyNameSpace的工程,添加一个类,名称为MyHandler,代码如下:
例1:
namespaceMyNameSpace
{
publicclassMyHandler:IHttpHandler
{
publicvoidProcessRequest(HttpContextctx)
{
HttpResponseResponse
Response.Write("Thisismyhandler");}
publicboolIsReusable
{
get{returntrue;}
}
}
}

  2、将上面的代码编译,生成MyNameSpace.Dll文件;3、建立一个新的WebApplication项目,或打开一个WebApplication项目,将文件MyNameSpace.Dll添加到项目的引用中,或复制到项目的bin目录下;4、修改Web.Config,添加如下内容:
<configuration>
<system.web>
<httpHndlers>
<addverb="*"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页面,页面上显示的始终只有如下一行字:
Thisismyhandler


  因为,我们自定义的Handler截获了所有发向ASPX页面的请求,并且用自己的的方法来处理这些请求了。为了使我们的ASPX页面能够顺利运行,我们需要修改Web.Config文件:
<configuration>
<system.web>
<httpHndlers>
<addverb="*"path="*.foo"
type="MyNameSpace.MyHandr,hander"/>
</httpHndlers>
</system.web>
</configuration>


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

  图3:Web站点属性对话框
  选择配置,弹出应用程序配置对话框,将".foo"添加到应用程序映射中,如图4:

  图4:添加应用程序映射
好了,我们现在可以在项目中添加一个.foo文件,当向该文件发送请求时,浏览器显示:
Thisismyhandler


  而对其他ASPX文件的访问不受影响。
实现HandlerFactory
实现HttpHandler功能的另外一个选择是实现一个HandlerFactory,这是通过实现IHttpHandlerFactory接口来实现的。IHttpHandlerFactory接口的定义如下:
interfaceIHttpHandlerFactory
{
IHttpHandlerGetHandler(HttpContextctx,
stringrequestType,
stringurl,
stringpathTranslated);
voidReleaseHandler(IHttpHandlerhandler);
}


G  etHandler方法在请求开始的时候被调用,而ReleaseHandler在请求结束,所有的Handler都不再需要的时候被调用。使用HttpHandlerFactory的过程一般如下:首先定义实际处理HttpHandler的类,这个类会在HandlerFactory中被调用以进行实际的处理:
publicclassBasicHandler:IHttpHandler{...}


  然后,定义自己的HandlerFactory:
publicclassBasicHandlerFactory:IHttpHandlerFactory
{
publicIHttpHandlerGetHandler(HttpContextctx,
stringrequestType,
stringurl,
stringpathTranslated)
{
returnnewBasicHandler();
}
publicvoidReleaseHandler(IHttpHandlerhandler){}
}


  最后,在Web.Config文件中注册这个Factory:
<configuration>
<system.web>
<httpHandlers>
<addverb="POST"path="*.foo"
type="MyNamespace.BasicHandlerFactory,MyAssembly"/>
</httpHandlers>
</system.web>
</configuration>



 异步Handler
  通过实现IHttpAsyncHandler可以实现对HTTP请求的异步处理。IHttpAsyncHandler接口继承IHttpHandler,也需要实现ProcessRequest方法和IsReusable属性,同时,需要实现BeginProcessRequest和EndProcessRequest方法。BeginProcessRequest启动异步调用以处理单个的HTTP请求,而EndProcessRequest则在该进程结束时执行清理代码。IHttpAsyncHandler的实现和注册同IHttpHandler类似,读者可以参考MSDN的相关文档。现在,大家是否对HTTPHandler的概念和应用有了一定的了解?在下一篇文章中,我们将主要介绍HTTPModule的的应用,并给出使用HttpModule实现权限系统的实例。

分享到:
评论

相关推荐

    ASP.Net中自定义Http处理及其应用

    ASP.Net中自定义Http处理及其应用

    Jokul ASP.NET Web自定义控件源码

    附件中是控件RichEditor使用的图片,拷贝到Web应用 程序文件夹下,在控件属性中设置好路径即可。 控件5:CalendarInput 输入框控件,点击可选取日期,避免因键盘输入导致日期 格式错误的问题。 以上源码供个人...

    ASP.NET常见问题集锦.zip

    关于ASP.Net中的时间处理.txt 关于上下文.doc 创建可分页、可排序的 DataGrid.doc 创建用于 ASP.NET 的分页程序控件.doc 创建用于ASP.NET的分页控件.txt 利用 ASP.NET 创建多页自定义报表.doc 利用属性扩展元...

    ASP.NET应用开发案例教程——基于MVC模式的ASP.NET+c#+ADO.NET 课件

    全书论述了ASP.NET开发概述、C#及ADO.NET背景知识、ASP.NET Web窗体的基本控件、数据控件和数据绑定技术、用户控件和自定义控件、ASP.NET内置对象和缓存技术、ASP.NET应用程序配置及编译和部署、ASP.NET与Web服务、...

    下部分课件 ASP.NET应用开发案例教程——基于MVC模式的ASP.NET+c#+ADO.NET 课件

    全书论述了ASP.NET开发概述、C#及ADO.NET背景知识、ASP.NET Web窗体的基本控件、数据控件和数据绑定技术、用户控件和自定义控件、ASP.NET内置对象和缓存技术、ASP.NET应用程序配置及编译和部署、ASP.NET与Web服务、...

    asp.net pdf 电子教程

    第3章至第6章介绍asp.net中的基本html控件和web控件,包括表单验证控件、用户控件、自定义控件和多信息控件等。第7章介绍asp.net应用程序的调试。第8章至12章介绍asp.net的一些高级应用,包括数据绑定、创建服务器端...

    asp.net(c#)课件

    内容涵盖了ASP.NET程序的运行环境需求、c#语法基础、ASP.NET扩展的HTML控件和Web内部控件的使用、ASP.NET的常用内置对象、.NET的命名空间、在ASP.NET中实现事件驱动、在ASP.NET程序中使用Web增强控件和自定义控件、...

    ASP.NET学习大全

    实现一个Asp.net自定义Back控件.txt 使用XML创建Excel文档.txt 鼠标停留在GridView某一行时颜色改变.txt 微软提供的加密方法.txt 无法破解的软件注册码算法.txt 用Asp.net实现简单的文字水印.txt 用ASP.Net写一个...

    ASP.NET开发实战详解

    上篇为基础知识篇,主要介绍ASP.NET的基础知识,包括ASP.NET的运 行环境、基本语法、常用的内置Web服务器控件、自定义控件以及如何在ASP .NET中进行数据访问和ASP.NET应用程序的部署等;中篇为典型模块篇,主 要介绍...

    Asp.Net WebApi添加SwaggerUI

    Visual Studio 2017下Asp.Net WebApi应用添加SwaggerUI 附详细解说

    自定义Http处理及应用之HttpHandler篇

    自定义Http处理及应用之HttpHandler篇

    [ASP.NET.AJAX编程参考手册(涵盖ASP.NET.3.5及2.0)].(美)霍斯拉维.扫描版.pdf

    中文名: ASP.NET AJAX编程参考手册(涵盖ASP.NET 3.5及2.0) 原名: ASP.NET AJAX Programmer's Reference 作者: (美)霍斯拉维 译者: 刘志忠 图书分类: 软件 资源格式: PDF 版本: 扫描版 出版社: 清华大学出版社 书号...

    ASP.NET的网页代码模型及生命周期

    在ASP.NET中,可以创建ASP.NET网站和ASP.NET应用程序,但是ASP.NET网站和ASP.NET应用程序开发过程和编译过程是有区别的。ASP.NET应用程序主要有以下特点: q 可以将ASP.NET应用程序拆分成多个项目以方便开发,管理和...

    ASP.NET完全入门

    《ASP.NET完全入门》面向初、中、高级用户,全面系统地介绍了ASP.NET的特点、基础知识和具体的应用。 《ASP.NET完全入门》由浅入深,层层深入的讲解了ASP.NET技术,在本书中写作中,例子都使用了VB.NET的语法。所以...

    ASP.NET 简明教程(PDG).rar

    ASP.NET的常用内置对象、.NET的命名、如何在ASP.NET中实现事件驱动、如何在ASP.NET程序中使用Web增强控件和自定义控件、ADO.NET和使用ADO.NET进行数据库访问、如何在ASP.NET中应用XML、如何对ASP.NET进行配置和优化...

    asp.net完全入门

    具有更好的可扩展性与可定制性,数据处理方面更是引入了许多激动人心的新技术,正是这些具有革新意义的新特性,让ASP.NET远远超越了ASP,同时也提供给web开发人员更好的灵活性,有效缩短了web应用程序的开发周期。...

    asp.net学习大全(超全面的资料整合)

    实现一个Asp.net自定义Back控件.txt 使用XML创建Excel文档.txt 鼠标停留在GridView某一行时颜色改变.txt 微软提供的加密方法.txt 无法破解的软件注册码算法.txt 用Asp.net实现简单的文字水印.txt 用ASP.Net写一个...

    《ASP.NET.4 从入门到精通》张大威

    书中采用深受读者欢迎的step by step风格,指导读者通过具体的示例来熟悉和掌握asp.net4的重要特性,并通过练习的方式来进一步呈现和演示,有助于读者采用ajax、wcf服务、自定义控件和母版页等流行技术来创建出色的...

    微软ASP.NET入门教程

    ASP.NET Web 应用程序 应用程序概述 使用 Global.asax 文件 管理应用程序状态 Http 处理程序和工厂 缓存服务 缓存概述 页输出缓存 页片断缓存 页数据缓存 配置 配置概述 配置文件格式 检索配置 部署 ...

Global site tag (gtag.js) - Google Analytics