ASP.NET中的HttpHandler是什么?

68

什么是 ASP.NET 中的 HttpHandler?为什么和如何使用它?


1
也许你可以使用MSDN上的这个页面作为起点: http://msdn.microsoft.com/zh-cn/library/bb398986.aspx - M4N
6个回答

82
简单来说,ASP.NET HttpHandler是实现System.Web.IHttpHandler接口的类。
ASP.NET HTTP处理程序负责拦截发送到ASP.NET Web应用程序服务器的请求。它们作为进程响应于发送到ASP.NET Site的请求。最常见的处理程序是处理.aspx文件的ASP.NET页面处理程序。当用户请求一个.aspx文件时,该请求通过页面处理程序进行处理。
ASP.NET提供了一些默认的HTTP处理程序:
- 页面处理程序(.aspx):处理Web页面 - 用户控件处理程序(.ascx):处理Web用户控件页面 - Web服务处理程序(.asmx):处理Web服务页面 - Trace处理程序(trace.axd):处理跟踪功能
您可以创建自己的自定义HTTP处理程序,以向浏览器呈现自定义输出。在ASP.NET中使用HTTP Handlers的典型场景包括:
- 传递动态创建的图像(例如图表)或调整大小的图片。 - 发布RSS源,该源发出格式化为RSS的XML。
您可以实现IHttpHandler接口来创建同步处理程序,实现IHttpAsyncHandler接口来创建异步处理程序。这两个接口都要求您实现ProcessRequest方法和IsReusable属性。
ProcessRequest方法处理实际请求的处理,而布尔值IsReusable属性指定您的处理程序是否可以池化以进行重复使用(以提高性能),还是每个请求都需要新的处理程序。

2
能否请您解释一下您所说的“最常见的处理程序是处理.aspx文件的ASP.NET页面处理程序。当用户请求一个.aspx文件时,请求会通过页面处理程序进行处理。”?或者如果有相关链接也非常感激。谢谢。 - Imad Alazani
@PKKG 看一下这篇文章:http://msdn.microsoft.com/zh-cn/library/bb398986(v=vs.100).aspx#Background - splattne
谢谢你的回答。我实际上很好奇,当您请求特定页面时,它的 HttpHandler 会被调用吗?这是因为该页面派生自 HttpHandler,然后创建 Page 对象,接着调用页面事件?是这样的吗?感谢您的耐心。 - Imad Alazani
@PKKG 注意:IHttpHandler 是一个接口。类不会从它派生,而是实现它。 - splattne

16

HttpHandler(或IHttpHandler)基本上是负责提供内容的任何东西。ASP.NET页面(aspx)是一种处理程序。

例如,您可以编写自己的处理程序,从数据库中提供图像等内容,而不是从Web服务器本身提供,或编写一个简单的POX服务(而不是SOAP/WCF等)。


1
请问您能否解释一下这句话的意思:“您可能会编写自己的代码,例如从数据库中提取图像等内容,而不是直接从Web服务器中提取;您还可以编写一个简单的POX服务(而不是SOAP / WCF /等)”? - Imad Alazani
当您请求特定页面时,它的 HttpHandler 就会被调用?这是因为该页面派生自 HttpHandler,然后创建 Page 对象,接着调用 Page Events 吗?是这样吗? - Imad Alazani

2

HttpHandler示例

ASP.NET 2.0中的HTTP处理程序

处理程序负责满足浏览器的请求。浏览器管理的请求是通过文件扩展名或直接调用处理程序来处理的。在Asp.Net中,服务于传入Http请求的低级别请求和响应API是Http Handlers。所有处理程序都实现了IHttpHandler接口,该接口位于System.Web命名空间中。处理程序有点类似于Internet Server Application Programming Interface (ISAPI) 扩展。

您可以实现IHttpHandler接口来创建同步处理程序,也可以实现IHttpAsyncHandler接口来创建异步处理程序。这些接口要求您实现ProcessRequest方法和IsReusable属性。ProcessRequest方法处理实际的请求处理,而布尔值IsReusable属性指定您的处理程序是否可以池化以增加性能或每个请求需要一个新的处理程序。

.ashx文件扩展名保留供自定义处理程序使用。如果您使用.ashx文件扩展名创建自定义处理程序,则它将自动在IIS和ASP.NET中注册。如果您选择使用其他文件扩展名,则必须在IIS和ASP.NET中注册该扩展名。使用其他扩展名的优点是可以将多个文件扩展名分配给一个处理程序。

配置HTTP处理程序

配置节处理程序负责将传入的URL映射到IHttpHandler或IHttpHandlerFactory类。它可以在计算机、站点或应用程序级别声明。子目录继承这些设置。管理员使用指令来配置配置节。指令按从上到下的顺序逐个解释和处理。使用以下语法进行配置节处理程序:

创建HTTP处理程序

要创建HTTP处理程序,必须实现IHttpHandler接口。IHttpHandler接口有一个方法和一个属性,具有以下签名:

void ProcessRequest(HttpContext); bool IsReusable {get;}


4
这段文字可能是从 http://24x7aspnet.blogspot.com/2009/06/http-handler-in-aspnet-20.html 等网站直接复制的,已经有一个被采纳的高价值答案。请至少引用来源。最好用自己的话回答。 - GargantuChet

1
一个ASP.NET HTTP处理程序是在响应对ASP.NET Web应用程序的请求时运行的进程(通常称为“终结点”)。最常见的处理程序是处理.aspx文件的ASP.NET页面处理程序。当用户请求一个.aspx文件时,请求通过页面处理程序处理。您可以创建自己的HTTP处理程序,以向浏览器呈现自定义输出。

1
一个ASP.NET HTTP处理程序是响应ASP.NET Web应用程序请求运行的进程(通常称为“终点”)。最常见的处理程序是处理.aspx文件的ASP.NET页面处理程序。当用户请求一个.aspx文件时,该请求通过页面处理程序进行处理。
ASP.NET页面处理程序只是一种处理程序类型。ASP.NET带有其他几个内置处理程序,例如用于.asm文件的Web服务处理程序。
当您想要使用文件名扩展名来标识特殊处理时,可以创建自定义HTTP处理程序。例如,以下情况将是自定义HTTP处理程序的好用处: RSS提要 要为站点创建RSS提要,可以创建一个发出RSS格式化XML的处理程序。然后,您可以在应用程序中将.rss扩展名(例如)绑定到自定义处理程序。当用户发送以.rss结尾的请求到您的站点时,ASP.NET将调用您的处理程序来处理请求。 图像服务器 如果您希望Web应用程序以多种尺寸提供图像,则可以编写自定义处理程序来调整图像大小,然后将它们作为处理程序的响应发送回给用户。
HTTP处理程序可以访问应用程序上下文,包括请求用户的身份(如果已知)、应用程序状态和会话信息。当请求HTTP处理程序时,ASP.NET会调用相应处理程序上的ProcessRequest方法。处理程序的ProcessRequest方法创建响应,将其发送回请求的浏览器。与任何页面请求一样,响应通过订阅在处理程序运行后发生的事件的任何HTTP模块。

1
任何实现System.Web.IHttpHandler接口的类都成为HttpHandler。这个类作为进程响应于对ASP.NET站点的请求运行。
最常见的处理程序是处理.aspx文件的ASP.NET页面处理程序。当用户请求.aspx文件时,通过页面处理程序(实现System.Web.IHttpHandler接口的类)处理请求。
您可以创建自己的自定义HTTP处理程序,将自定义输出呈现给浏览器。
一些ASP.NET默认处理程序包括:
  1. 页面处理程序(.aspx)- 处理Web页面
  2. 用户控件处理程序(.ascx)- 处理Web用户控件页面
  3. Web服务处理程序(.asmx)- 处理Web服务页面
  4. 跟踪处理程序(trace.axd)- 处理跟踪功能

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接