有人能用不到2句话解释两者之间的区别吗?是的,我知道谷歌可以提供数百个答案,但不是两个明确的句子中的一个:)
答案 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提供了两种在请求管道中注入逻辑的方法;
例如: 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的任何文件名。
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模块用于:
安全性:用于在处理请求之前对请求进行身份验证。
统计信息和日志记录:由于模块是为每个请求而调用的,因此它们可用于收集统计信息和记录信息。
自定义标头:由于可以修改响应,因此可以将自定义标头信息添加到响应中。