HTTP处理程序与HTTP模块

fre*_*hie 140 asp.net httphandler httpmodule

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

mur*_*tgu 305

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

  • 尼斯.我想补充说HttpContext就是火车.每个站点(模块)在经过时以某种方式对HttpContext做出贡献. (5认同)
  • 从技术上讲,不是"不到两句话".<trollface> (4认同)
  • 我同意这是一个很好的答案,但不能被标记为已接受的答案. (3认同)

Jon*_*way 199

这两句话:

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

HttpHandler通常与特定扩展相关联,并且用于诸如RSS馈送,动态图像生成或修改等之类的事物.

如果不完全清楚,还有一点解释:

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

有一篇关于MSDN差异的非常明确的文章:HTTP处理程序和HTTP模块概述

  • 我是否正确地说每个请求只有1个处理程序和多个模块? (6认同)
  • @frenchie - 不,aspx页面是建立在HttpHandlers之上的,它为您提供了页面生命周期.把它想象成一个aspx页面,切入最基本的事件.`ProcessRequest`.另一方面,该模块将在您连接的生命周期中的任何一点执行.对于想要在aspx页面之前运行某些内容的场景,您需要一个模块.但是,您需要手动过滤掉不是.aspx的页面的请求 (5认同)

小智 20

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

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

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

示例: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>
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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


小智 19

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

  • 是Frenchie.打开任何aspx后面的代码.你会看到:public partial class good:System.Web.UI.Page现在右键单击Page并单击Go to definition,你会看到:public class Page:TemplateControl,IHttpHandler (17认同)
  • 从这个意义上说,aspx 可以被认为是 httphandler 的一种吗? (2认同)

mar*_*ker 5

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