Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net HTTP处理程序与HTTP模块_Asp.net_Httphandler_Httpmodule - Fatal编程技术网

Asp.net HTTP处理程序与HTTP模块

Asp.net HTTP处理程序与HTTP模块,asp.net,httphandler,httpmodule,Asp.net,Httphandler,Httpmodule,有人能用不到两句话解释两者的区别吗?是的,我知道谷歌可以提供数百个答案,但不是每两个清晰的句子中就有一个:)这两个句子: HttpModule将对应用程序的每个请求执行,而不考虑扩展,通常用于安全性、统计信息、日志记录等 HttpHandler通常与特定扩展相关联,用于RSS提要、动态图像生成或修改等 如果不完全清楚的话,再解释一下: 我对它们的看法是:模块“插入”到请求管道,而处理程序“处理”特定的文件扩展名。因此,如果您有一个带有LoggingModule和PdfHandler的站点,那么这

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

这两个句子:

HttpModule将对应用程序的每个请求执行,而不考虑扩展,通常用于安全性、统计信息、日志记录等

HttpHandler通常与特定扩展相关联,用于RSS提要、动态图像生成或修改等

如果不完全清楚的话,再解释一下:

我对它们的看法是:模块“插入”到请求管道,而处理程序“处理”特定的文件扩展名。因此,如果您有一个带有LoggingModule和PdfHandler的站点,那么这两个模块都将执行对的请求,而日志模块将单独执行对的请求


MSDN上有一篇关于差异的非常明确的文章:

HttpHandler是请求序列的出发点。HttpModule是一个站点。

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

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

关于它的文章很好

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


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

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

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

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

  • 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:此属性告诉是否可以重用此处理程序

    您可以像这样在web.config文件中注册处理程序

    <httpHandlers>
       <add verb="*" path="*.arshad" type="namespace.classname, assemblyname" />
    </httpHandlers>
    
    
    
    注意:这里我们处理扩展名为arshad的任何文件名

  • Http模块: HttpModule是一个基于事件的处理器,用于在请求到达IIS服务器之前注入预处理逻辑。ASP.NET使用HTTP模块实现其自身的许多功能,如身份验证和授权、会话管理和输出缓存等
  • 当请求通过请求管道时,ASP.NET引擎会发出大量事件。 其中一些事件是AuthenticateRequest、AuthorizeRequest、BeginRequest和EndRequest。 通过使用HttpModule,您可以在这些事件中写入逻辑。这些逻辑在事件触发时以及在请求到达IIS之前执行

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

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

    HTTP处理程序

    HTTP处理程序是响应HTTP请求运行的进程。因此每当用户请求文件时,它会根据扩展名由处理程序处理。因此,当需要基于文件扩展名进行特殊处理时,创建自定义HTTP处理程序。让我们考虑一个示例来创建站点的RSS。因此,创建一个更通用的处理程序。ates RSS格式的XML。现在将.RSS扩展名绑定到自定义处理程序

    HTTP模块

    HTTP模块插入到请求的生命周期中。因此,当处理请求时,它将通过请求管道中的所有模块。因此,通常HTTP模块用于:

    安全性:用于在处理请求之前对请求进行身份验证

    统计信息和日志记录:由于每个请求都会调用模块,因此可以使用模块收集统计信息和日志记录信息


    自定义标题:由于响应可以修改,因此可以向响应中添加自定义标题信息。

    在每次请求之前运行一些代码的上下文中。+1表示“是的,我知道我可以用谷歌搜索它”。“少于两句话。”比如,一句话?好的,如果我想在每个.aspx文件的请求上运行一些代码,我就实现一个处理程序,如果我想在每个请求上运行一些代码,不管请求的文件类型如何,我就实现一个模块。是吗?@frenchie-不是,aspx页面是在HttpHandlers之上构建的,为您提供页面生命周期。Think作为aspx页面,cu