2011-06-23 80 views
115

有人可以用不到两句话解释两者之间的区别吗?是的,我知道,谷歌能提供数百​​个答案,但没有一个在2个语句清楚:)HTTP处理程序vs HTTP模块

+0

在什么情况下? – Flimzy

+0

在每个请求前寻找运行一些代码的上下文。 – frenchie

+18

+1是“我知道我可以谷歌它”。 – Csharp

回答

254

HttpHandler的是在请求火车前往。 HttpModule是一个站点。

+4

这应该是被接受的答案。 –

+39

伟大的内联爆炸..你是编程的莎士比亚。 – Pranav

+0

精彩的解释! :) –

181

的两句话:

一个HttpModule将执行的每个请求您的应用程序,无论扩展的,并且通常使用例如安全性,统计,日志记录等。

HttpHandler通常与特定的扩展名关联,并用于诸如RSS提要,动态图像生成或修改等。

如果这不是完全清楚多一点解释:

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

有MSDN上的差异很明显文章:HTTP Handlers and HTTP Modules Overview

+0

好的,所以如果我想运行一些运行在.aspx文件的每个请求上的代码,我实现了一个处理程序,如果我想在每个请求上运行一些代码而不管请求的文件类型如何,我实现一个模块。是吗? – frenchie

+4

@frenchie - 不,aspx页面是建立在HttpHandlers的基础之上的,为您提供页面生命周期。把它看作一个aspx页面,切入非常基本的事件。 'ProcessRequest'。另一方面,该模块将在您连接到的生命周期的任何时刻执行。对于希望在aspx页面之前运行某些内容的场景,您需要一个模块。然而,你需要手动过滤掉请求页面不是.aspx – Phill

+5

我是否正确的说,每个请求可以只有一个处理程序和多个模块? –

15

HTTP处理程序是响应对ASP.NET Web应用程序的请求而运行的进程。 通过HTTP模块,您可以检查传入和传出的请求,并根据请求采取措施。

+1

从这个意义上说,aspx可以被认为是一种类型的httphandler? – frenchie

+14

是Frenchie ..打开任何aspx后面的代码。你会看到: public partial class good:System.Web.UI.Page 现在右键单击页面并单击转到定义,你会看到: public class Page:TemplateControl,IHttpHandler –

1

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

2

好文章aboute它HttpModule-and-HttpHandlers

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

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

+0

谢谢,它可以帮助我很多 –

1

HttpHandler负责处理http请求,而HttpModule响应应用程序生命周期事件。

13

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

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

  1. HTTP处理程序: HTTP处理程序帮助我们根据请求的文件名的扩展注入预处理逻辑。 ASP.NET使用HTTP处理程序来实现许多自己的功能。例如,ASP.NET使用处理程序处理.aspx,.asmx和trace.axd文件。

示例: RSS提要:要为网站创建RSS提要,您可以创建一个发布RSS格式XML的处理程序。因此,当用户向您的站点发送以.rss结尾的请求时,ASP.NET会调用您的处理程序来处理请求。

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

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

你可以这样

<httpHandlers> 
    <add verb="*" path="*.arshad" type="namespace.classname, assemblyname" /> 
</httpHandlers> 

注登记web.config文件处理程序:在这里我们处理与扩展艾尔沙德任何文件名。

  1. Http模块: HttpModule是基于事件的处理器,用于在请求到达IIS服务器之前注入预处理逻辑。 ASP.NET使用HTTP模块实现许多自己的功能,如身份验证和授权,会话管理和输出缓存等。

ASP.NET引擎在请求传递通过请求管道时发出大量事件。 其中一些事件是AuthenticateRequest,AuthorizeRequest,BeginRequest,EndRequest。 通过使用HttpModule,您可以在这些事件中编写逻辑。这些逻辑在事件触发和请求到达IIS之前得到执行。

有参与创建模块两步, 1.在web.config中或machine.config文件实现IHttpModule的接口 2.注册模块

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