HTTP处理程序与HTTP模块

时间:2011-06-23 03:53:12

标签: asp.net httphandler httpmodule

有人能用不到2句话解释两者之间的区别吗?是的,我知道谷歌可以提供数百个答案,但不是两个明确的句子中的一个:)

8 个答案:

答案 0 :(得分:293)

HttpHandler是请求列车前往的地方。 HttpModule是沿途的一个站点。

答案 1 :(得分:192)

两句话:

HttpModule将针对您的应用程序的每个请求执行,无论扩展名如何,并且通常用于安全性,统计信息,日志记录等。

HttpHandler通常与特定扩展相关联,用于RSS提要,动态图像生成或修改等内容。

如果不完全清楚,可以再解释一下:

我想到它们的方式 - 模块“插入”到请求管道,而处理程序“处理”特定的文件扩展名。因此,如果您有一个包含LoggingModule和PdfHandler的站点,则两者都将执行请求http://example.com/sample.pdf,并且仅针对http://example.com/page.aspx的请求执行日志记录模块。

关于MSDN上的差异,有一篇非常明确的文章:HTTP Handlers and HTTP Modules Overview

答案 2 :(得分:20)

HttpHandler和HttpModule的主要目标是在ASP.NET请求到达IIS服务器之前注入预处理逻辑。

ASP.NET提供了两种在请求管道中注入逻辑的方法;

  1. Http处理程序: Http Handler帮助我们根据所请求文件名的扩展注入预处理逻辑。 ASP.NET使用HTTP处理程序来实现许多自己的功能。例如,ASP.NET使用处理程序来处理.aspx,.asmx和trace.axd文件。
  2. 例如: RSS提要:要为网站创建RSS提要,您可以创建一个发出RSS格式的XML的处理程序。因此,当用户向您的站点发送以.rss结尾的请求时,ASP.NET会调用您的处理程序来处理请求。

    创建Handler涉及三个步骤 1.实现IHttpHandler接口。 2.在web.config或machine.config文件中注册处理程序。 3.将文件扩展名(* .arshad)映射到IIS中的aspnet_isapi.dll。

    IHttpHandler接口具有需要实现的ProcessRequest方法和IsReusable属性。 ProcessRequest:在此方法中,您编写生成处理程序输出的代码。 IsResuable:此属性指示是否可以重用此处理程序。

    您可以像这样

    在web.config文件中注册处理程序
    <httpHandlers>
       <add verb="*" path="*.arshad" type="namespace.classname, assemblyname" />
    </httpHandlers>
    

    注意:这里我们正在处理扩展名为arshad的任何文件名。

    1. Http模块: HttpModule是一个基于事件的处理器,用于在请求到达IIS服务器之前注入预处理逻辑。 ASP.NET使用HTTP模块实现许多自己的功能,如身份验证和授权,会话管理和输出缓存等。
    2. ASP.NET引擎在请求传递通过请求管道时发出大量事件。 其中一些事件是AuthenticateRequest,AuthorizeRequest,BeginRequest,EndRequest。 通过使用HttpModule,您可以在这些事件中编写逻辑。这些逻辑在事件触发时以及请求到达IIS之前执行。

      创建模块涉及两个步骤, 1.实现IHttpModule接口 2.在web.config或machine.config文件中注册模块

      例如: 安全性:使用HTTP模块,您可以在请求到达IIS之前执行自定义身份验证或其他安全检查。

答案 3 :(得分:17)

HTTP处理程序是为响应对ASP.NET Web应用程序发出的请求而运行的进程。 HTTP模块允许您检查传入和传出请求,并根据请求采取操作。

答案 4 :(得分:4)

当HttpModule响应应用程序生命周期事件时,HttpHandler负责通过扩展处理http请求。

答案 5 :(得分:2)

好文章aboute it HttpModule-and-HttpHandlers

参考:INFO:ASP.NET HTTP模块和HTTP处理程序概述

“在处理程序执行之前和之后调用模块。模块使开发人员能够拦截,参与或修改每个单独的请求。处理程序用于处理各个端点请求。处理程序使ASP.NET Framework能够在应用程序中处理单个HTTP URL或URL扩展组。与模块不同,只有一个处理程序用于处理请求“。

答案 6 :(得分:1)

HTTP处理程序是基于设置实际编译的地方。例如,如果页面扩展名是.aspx,那么它将通过system.web.Ui.Pagahandlefactory进行编译。一旦在HTTP处理完成编译,请求将通过HTTP模块和IIS。

答案 7 :(得分:0)

HTTP处理程序

HTTP处理程序是响应HTTP请求而运行的进程。因此,无论何时用户请求文件,处理程序都会基于扩展名对其进行处理。因此,当您需要基于文件扩展名进行特殊处理时,会创建自定义http处理程序。让我们考虑一个为站点创建RSS的示例。因此,创建一个生成RSS格式XML的处理程序。现在,将.rss扩展名绑定到自定义处理程序。

HTTP模块

HTTP模块已插入请求的生命周期。因此,在处理请求时,请求将通过请求管道中的所有模块。因此,通常将http模块用于:

安全性:用于在处理请求之前对请求进行身份验证。

统计信息和日志记录:由于模块是为每个请求而调用的,因此它们可用于收集统计信息和记录信息。

自定义标头:由于可以修改响应,因此可以将自定义标头信息添加到响应中。