什么是 ASP.NET 中的 HttpHandler

Posted

技术标签:

【中文标题】什么是 ASP.NET 中的 HttpHandler【英文标题】:What is an HttpHandler in ASP.NET 【发布时间】:2022-02-02 10:10:18 【问题描述】:

?为什么以及如何使用它?

【问题讨论】:

也许你可以从 MSDN 的这个页面开始:http://msdn.microsoft.com/en-us/library/bb398986.aspx 【参考方案1】:

简单来说,ASP.NET HttpHandler 是一个实现System.Web.IHttpHandler 接口的类。

ASP.NET HTTPHandlers 负责拦截向您的 ASP.NET Web 应用程序服务器发出的请求。它们作为进程运行以响应对 ASP.NET 站点的请求。最常见的处理程序是处理 .aspx 文件的 ASP.NET 页面处理程序。当用户请求 .aspx 文件时,该请求由页面通过页面处理程序进行处理。

ASP.NET 提供了一些默认的 HTTP 处理程序

页面处理程序 (.aspx):处理网页 用户控制处理程序 (.ascx):处理 Web 用户控制页面 Web 服务处理程序 (.asmx):处理 Web 服务页面 跟踪处理程序 (trace.axd):处理跟踪功能

您可以创建自己的自定义 HTTP 处理程序,将自定义输出呈现给浏览器。例如,ASP.NET 中 HTTP 处理程序的典型场景是

交付动态创建的图像(例如图表)或调整大小的图片。 发出 RSS 格式的 XML 的 RSS 提要

实现IHttpHandler 接口以创建同步处理程序,并IHttpAsyncHandler 接口以创建异步处理程序。这些接口要求您实现ProcessRequest 方法和IsReusable 属性。

ProcessRequest 方法处理发出的请求的实际处理,而布尔值 IsReusable 属性指定您的处理程序是否可以被池化以供重用(以提高性能),或者每个请求是否需要一个新的处理程序。

【讨论】:

您能否解释一下您所说的最常见的处理程序是处理 .aspx 文件的 ASP.NET 页面处理程序。当用户请求一个 .aspx 文件时,该请求由页面通过页面处理程序进行处理。 ?或者任何链接将非常非常感激。谢谢。 @PKKG 看看这篇文章:msdn.microsoft.com/en-us/library/… 谢谢。我实际上很想知道,当您请求特定页面时,会调用 HttpHandler 吗?这是因为该页面派生自HttpHandler,然后创建Page 对象,然后调用页面事件?是这样吗?感谢您的耐心等待。 @PKKG 注意:IHttpHandler 是一个接口。类不是派生自它,而是实现它。【参考方案2】:

HttpHandler(或IHttpHandler)基本上是负责提供内容的任何东西。 ASP.NET 页面 (aspx) 是一种处理程序。

您可以自己编写,例如,从数据库而不是网络服务器本身提供图像等,或者编写一个简单的 POX 服务(而不是 SOAP/WCF/等)

【讨论】:

请您解释一下您可以自己编写,例如,从数据库而不是网络服务器本身提供图像等,或者编写一个简单的 POX 服务(而不是SOAP/WCF/等) ? 当你请求一个特定的页面时,它的HttpHandler被调用了?这是因为该页面派生自HttpHandler,然后创建Page 对象,然后调用Page Events?是这样的吗?【参考方案3】:

HttpHandler 示例,

ASP.NET 2.0 中的 HTTP 处理程序

处理程序负责完成来自浏览器的请求。浏览器管理的请求要么通过文件扩展名处理,要么直接调用处理程序。用于服务传入 Http 请求的低级请求和响应 API 是 Asp.Net 中的 Http 处理程序。所有处理程序都实现 IHttpHandler 接口,该接口位于 System.Web 命名空间中。处理程序有点类似于 Internet 服务器应用程序编程接口 (ISAPI) 扩展。

您实现 IHttpHandler 接口来创建同步处理程序,并实现 IHttpAsyncHandler 接口来创建异步处理程序。这些接口要求您实现 ProcessRequest 方法和 IsReusable 属性。 ProcessRequest 方法处理发出的请求的实际处理,而 Boolean IsReusable 属性指定您的处理程序是否可以合并以重用以提高性能,或者是否需要为每个请求一个新的处理程序。

.ashx 文件扩展名是为自定义处理程序保留的。如果您创建一个文件扩展名为 .ashx 的自定义处理程序,它将自动在 IIS 和 ASP.NET 中注册。如果您选择使用备用文件扩展名,则必须在 IIS 和 ASP.NET 中注册该扩展名。使用 .ashx 以外的扩展名的好处是您可以为一个处理程序分配多个文件扩展名。

配置 HTTP 处理程序

配置节处理程序负责将传入的 URL 映射到 IHttpHandler 或 IHttpHandlerFactory 类。它可以在计算机、站点或应用程序级别声明。子目录继承这些设置。 管理员使用标签指令来配置该部分。指令以自上而下的顺序进行解释和处理。对节处理程序使用以下语法:

创建 HTTP 处理程序

要创建 HTTP 处理程序,您必须实现 IHttpHandler 接口。 IHttpHandler 接口具有一个方法和一个属性,具有以下签名: 无效进程请求(HttpContext); bool IsReusable get;

【讨论】:

这是从某个地方逐字复制的,可能是24x7aspnet.blogspot.com/2009/06/http-handler-in-aspnet-20.html,并且已经有一个高价值的公认答案。请至少引用来源。如果您用自己的话回答会更好。【参考方案4】:

任何实现System.Web.IHttpHandler 接口的类都变成HttpHandler。并且此类作为进程运行以响应对 ASP.NET 站点的请求。

最常见的处理程序是处理 .aspx 文件的 ASP.NET 页面处理程序。当用户请求一个.aspx文件时,请求由页面通过页面处理程序(实现System.Web.IHttpHandler接口的类)进行处理。

您可以创建自己的自定义 HTTP 处理程序,将自定义输出呈现给浏览器。

一些 ASP.NET 默认处理程序是:

    页面处理程序 (.aspx) - 处理网页 用户控制处理程序 (.ascx) - 处理 Web 用户控制页面 Web 服务处理程序 (.asmx) – 处理 Web 服务页面 跟踪处理程序 (trace.axd) - 处理跟踪功能

【讨论】:

【参考方案5】:

ASP.NET HTTP 处理程序是响应对 ASP.NET Web 应用程序发出的请求而运行的进程(通常称为“端点”)。最常见的处理程序是处理 .aspx 文件的 ASP.NET 页面处理程序。当用户请求 .aspx 文件时,该请求由页面通过页面处理程序进行处理。您可以创建自己的 HTTP 处理程序,将自定义输出呈现给浏览器。

【讨论】:

【参考方案6】:

ASP.NET HTTP 处理程序是响应对 ASP.NET Web 应用程序发出的请求而运行的进程(通常称为“端点”)。最常见的处理程序是处理 .aspx 文件的 ASP.NET 页面处理程序。当用户请求.aspx file时,该请求由页面通过页面处理程序进行处理。

ASP.NET 页面处理程序只是一种处理程序。 ASP.NET 附带几个其他内置处理程序,例如.asmx files 的 Web 服务处理程序。

当您需要特殊处理时,您可以创建自定义 HTTP 处理程序,您可以在应用程序中使用文件扩展名来识别这些处理程序。例如,以下场景可以很好地使用自定义 HTTP 处理程序:

RSS 提要 要为站点创建 RSS 提要,您可以创建一个发出 RSS 格式的 XML 的处理程序。然后,您可以将应用程序中的 .rss 扩展名(例如)绑定到自定义处理程序。当用户向您的站点发送以 .rss 结尾的请求时,ASP.NET 将调用您的处理程序来处理该请求。

图像服务器如果您希望 Web 应用程序提供各种尺寸的图像,您可以编写一个自定义处理程序来调整图像大小,然后将它们作为处理程序的响应发送回用户。

HTTP 处理程序可以访问应用程序上下文,包括请求用户的身份(如果已知)、应用程序状态和会话信息。当请求 HTTP 处理程序时,ASP.NET 会在适当的处理程序上调用 ProcessRequest 方法。处理程序的ProcessRequest 方法创建一个响应,该响应被发送回请求浏览器。与任何页面请求一样,响应会通过任何订阅了在处理程序运行后发生的事件的 HTTP 模块。

【讨论】:

以上是关于什么是 ASP.NET 中的 HttpHandler的主要内容,如果未能解决你的问题,请参考以下文章

什么是 ASP.NET 中的默认会话超时?

什么是 ASP.NET 中的 HttpHandler

什么是 Asp.net 中的中等信任?

什么是 asp.net vnext 中的 wwwroot

#.NET使用HttpHandle对象实现水印和验证码

#.NET使用HttpHandle对象实现水印和验证码