选择显示字体大小

asp.net中的http handles

     一、关于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中实现的有:
  processrequest:该方法用来处理http请求,是http handles最核心的方法
  isreusable:一个属性,返回一个bool值,来表示这http handle的实例是否能被重用来处理多个同类型的http请求。
  
  二、在配置文件中注册http handles
   http handles的类可以在web.config或machine.config文件里注册。这样,一旦有相应的http请求输入,这个http handle类就会被实例化。在web.config或machine.config文件里我们用<httphandlers>和<add>节点来为我们的应用程序添加http handle类:
  <httphandlers>
   <add verb="supported http verbs" path="path" type="namespace.classname, assemblyname" />
  <httphandlers>
  
  在<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"/>
  
   <add verb="get,head" path="*" type="system.web.staticfilehandler"/>
  
   . . . . . .
   . . . . . .
  </httphandlers>
  从上面的配置可以看出来对.aspx文件的请求是交由system.web.ui.pagehandlerfactory类来处理的,而象.config文件是被system.web.httpforbiddenhandler类来处理,可以猜想这个类将会返回一个该类文件不能被请求的错误。
  
  三、http handles类的实现
   在这里我们用c#来创建一个新的handle类来处理新的文件类型,比如以.possible为后缀名的文件。
  1、我们先在vs.net里创建web应用程序的工程,名为myhandler,然后添加一个类文件newhandler.cs来建立实现了ihttphandler接口的类:
  
  using system;
  using system.web;
  
  namespace myhandler
  {
   /// <summary>
   /// summary description for newhandler.
   /// </summary>
   public class newhandler : ihttphandler
   {
   public newhandler()
   {
   //
   // todo: add constructor logic here
   //
   }
  
   #region implementation of ihttphandler
   public void processrequest(system.web.httpcontext context)
   {
   httpresponse objresponse = context.response ;
   objresponse.write("<html><body><br><br><center>hi,this is a test! ") ;
   objresponse.write("</center></body></html>") ;
   }
  
   public bool isreusable
   {
   get
   {
   return true;
   }
   }
   #endregion
   }
  }
  在processrequest方法的实现里,我们只是简单的获取了httpcontext的httpresponse对象,并象客户端发送了一些html。在isreusable的实现里返回true,表示该handle类的实例可以处理多个对.possible文件的请求。
  
  注意:如果想在http handlers里使用session,那么还需要实现irequiressessionstate接口,而irequiressessionstate接口只是一个标志,不需要实现任何的具体方法,所以只需要把类申明改为:public class newhandler : ihttphandler,irequiressessionstate即可。
  
  2、打开web.config文件,注册上面新创建的handle类:
  <httphandlers>
   <add verb="*" path="*.possible" type="myhandler.newhandler,myhandler"/>
  </httphandlers>
  
  3、在iis中添加isapi扩展,将我们的新后缀名.possible添加进去,具体过程为:
  iis--》选中“默认网站”点右键--》选“属性”--》“主目录”--》“配置”--》点“映射”里的“添加”按钮--》在弹出对话框里点击“浏览”按钮,选择as.net_isapi.dll文件,并在扩展名里填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
    


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons