Answers:
HttpHandler是请求序列的前进方向。HttpModule是整个过程中的一个站。
两个句子:
HttpModule将针对您的应用程序的每个请求执行,无论其扩展名如何,并且通常用于安全性,统计信息,日志记录等。
HttpHandler通常与特定的扩展名相关联,并且用于RSS提要,动态图像生成或修改等操作。
如果还不清楚,请多做一些解释:
我考虑它们的方式-模块“插入”请求管道,而处理程序“处理”特定文件扩展名。因此,如果您拥有一个包含LoggingModule和PdfHandler的站点,则两者都将执行对http://example.com/sample.pdf的请求,而单独的日志记录模块将执行对http://的请求。example.com/page.aspx。
关于MSDN的区别,有一篇非常清晰的文章:HTTP处理程序和HTTP模块概述
ProcessRequest
。另一方面,该模块将在您将其连接到的生命周期中的任何时候执行。对于要在aspx页面之前运行某些内容的场景,您需要一个模块。但是,您需要手动过滤出对非.aspx页面的请求
HttpHandler和HttpModule的主要共同目标是在ASP.NET请求到达IIS服务器之前注入预处理逻辑。
ASP.NET提供了两种在请求管道中注入逻辑的方法:
示例: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:此属性告诉此处理程序是否可以重用。
您可以像这样在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之前执行自定义身份验证或其他安全检查。
HTTP处理程序是响应ASP.NET Web应用程序的请求而运行的过程。HTTP模块使您可以检查传入和传出的请求,并根据请求采取措施。
关于它的不错的文章HttpModule-and-HttpHandlers
参考:INFO:ASP.NET HTTP模块和HTTP处理程序概述
“在处理程序执行之前和之后调用模块。模块使开发人员可以拦截,参与或修改每个单独的请求。处理程序用于处理各个端点请求。处理程序使ASP.NET Framework可以处理应用程序中的各个HTTP URL或一组URL扩展。与模块不同,仅使用一个处理程序来处理请求”。
HTTP处理程序是根据设置实际完成编译的地方。例如页面扩展名为.aspx,则它将通过system.web.Ui.Pagahandlefactory进行编译。一旦在HTTP处理完成编译,句柄请求将通过HTTP模块和IIS。
HTTP处理程序
HTTP处理程序是响应HTTP请求而运行的过程。因此,无论何时用户请求文件,处理程序都会基于扩展名对其进行处理。因此,当您需要基于文件扩展名进行特殊处理时,会创建自定义http处理程序。让我们考虑为站点创建RSS的示例。因此,创建一个生成RSS格式XML的处理程序。现在,将.rss扩展名绑定到自定义处理程序。
HTTP模块
HTTP模块已插入请求的生命周期。因此,在处理请求时,它会通过请求管道中的所有模块传递。因此,通常http模块用于:
安全性:用于在处理请求之前对请求进行身份验证。
统计信息和日志记录:由于模块是为每个请求调用的,因此它们可用于收集统计信息和记录信息。
自定义标头:由于可以修改响应,因此可以将自定义标头信息添加到响应中。