1回顶部 一、关于http handles ASP.NET的请求过程是基于一个管道(pipeline)模型的,ASP.NET会把所有的http请求(Requests)都发送给这个管道里的http组件(modules)。每个组件在接收到http请求后进行一些相应的动作。当http请求通过了所有的http modules程序后,将会被交由一个http handle程序来处理,处理后的结果又将通过管道里http modules返回。这整个过程中,被调用的http module可以有多个,然而调用的http handle只能是一个。其过程如图:
可以看出每个输入的http请求都会最终被一个http handle程序处理。http handle是一个实现了System.Web.IHttpHandler接口的类的实例,有些类似ISAPI扩展。在http handles中实现的有: 2回顶部 在<add>里 1、verb属性说明了该handle所支持的http请求方式,例如支持post和get方式,verb属性则为"POST,GET";如果支持所有的请求方式,verb属性则用"*"。 2、path属性说明了对哪些文件的请求才调用该handle来处理,例如你只想在请求my.possible文件时才调用该handle,则path属性为"my.possible",如果你想所有后缀名为possible的文件(*.possible)都由该handle来处理,则path属性为"*.possible"。 3、type属性中指定了handle类的命名空间、类名和配件名(工程名)。ASP.NET runtime会首先到应用程序的bin目录下查找该配件的dll,如果没有找到再到GAC里查找。 其实ASP.NET自身里的许多功能也是使用HTTP handlers来实现,ASP.NET使用了许多的handle类来处理.aspx, .asmx, .soap 和一些其它的ASP.NET文件。你可以在machine.config文件里找到如下代码: <httpHandlers> <add verb="*" path="trace.axd" type="System.Web.Handlers.TraceHandler"/> <add verb="*" path="*.aspx" type="System.Web.UI.PageHandlerFactory"/> <add verb="*" path="*.ashx" type="System.Web.UI.SimpleHandlerFactory"/> <add verb="*" path="*.config" type="System.Web.HttpForbiddenHandler"/> 3回顶部 三、http handles类的实现 在这里我们用C#来创建一个新的handle类来处理新的文件类型,比如以.possible为后缀名的文件。 1、我们先在vs.net里创建web应用程序的工程,名为MyHandler,然后添加一个类文件NewHandler.cs来建立实现了IHttpHandler接口的类: using System; namespace MyHandler #region Implementation of IHttpHandler public bool IsReusable 4回顶部 在ProcessRequest方法的实现里,我们只是简单的获取了HttpContext的HttpResponse对象,并象客户端发送了一些html。在IsReusable的实现里返回true,表示该handle类的实例可以处理多个对.possible文件的请求。 注意:如果想在HTTP handlers里使用session,那么还需要实现IRequiresSessionState接口,而IRequiresSessionState接口只是一个标志,不需要实现任何的具体方法,所以只需要把类申明改为:public class NewHandler : IHttpHandler,IRequiresSessionState即可。 2、打开web.config文件,注册上面新创建的handle类: 3、在IIS中添加ISAPI扩展,将我们的新后缀名.possible添加进去,具体过程为: 最后点击确定按钮。 这样我们就可以在浏览器里输入http://localhost/MyHandler/xxx.possible,来调用该handle了。当然我们这里只是举了个简单例子,所以输入任何*.possible都是一样的效果。我们可以在NewHandler的ProcessRequest方法里先分析请求的url,然后根据不同url作出不同的相应,比如跳转到不同的真实存在的aspx页面,这也正是web设计模式中MVC模式在asp.net中通过Front Controller实现的核心部分之一,具体请见:http://msdn.microsoft.com/architecture/patterns/default.aspx?pull=/library/en-us/dnpatterns/html/DesFrontController.asp。 |
闁衡偓閹増顥戦柟瀛樺姇婵拷闁哄被鍎冲﹢鍛村绩閹増顥�>>
正在阅读:ASP.NET中的Http HandlesASP.NET中的Http Handles
2004-04-07 14:31
出处:CSDN
责任编辑:sdq