HTTP处理程序与HTTP模块

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

HttpHandler是请求列车前往的地方。 HttpModule是一个工作站。

这两句话:

HttpModule将执行每个请求到您的应用程序,无论扩展,通常用于安全,统计,日志logging等事情。

一个HttpHandler通常与一个特定的扩展相关联,并被用于RSS提要,dynamic图像生成或修改等等。

如果还不完全清楚,请多加一点解释:

我认为他们的方式 – 模块“插入”到请求pipe道,而处理程序“处理”一个特定的文件扩展名。 所以,如果你有一个LoggingModule和一个PdfHandler的站点,两者都会执行一个请求到http://example.com/sample.pdf ,并且只有日志模块才会执行请求http:// example.com/page.aspx 。

有一个非常清晰的文章,关于MSDN上的差异: HTTP处理程序和HTTP模块概述

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

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

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

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

例如:RSS提要:要为网站创buildRSS提要,您可以创build一个发布RSS格式的XML的处理程序。 所以当用户发送一个以.rss结尾的请求时,ASP.NET调用你的处理程序来处理请求。

创buildHandler 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模块来实现许多自己的function,如authentication和授权,会话pipe理和输出caching等。

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

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

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

不错的文章aboute它HttpModule和HttpHandlers

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

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

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

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