HttpHandler

HttpHandler与HttpModule核心区别及迁移指南 HttpHandler和HttpModule是ASP.NET请求管道中两类关键扩展机制,前者负责终结请求并生成响应,后者通过订阅生命周期事件实现横切逻辑。其设计本质源于对HTTP请求处理流程的分层抽象:Handler对应‘执行单元’,Module对应‘拦截增强’。这种分离支撑了鉴权、日志、缓存等通用能力的复用与解耦,构成传统Web Forms/MVC架构可维护性的底层基础。随着.NET Core演进,二者被Middleware(模块化中间件)和Endpoint Routing(轻量终结点)以更透明、可测试的 阅读详情

概述

HttpHandler是一个HTTP请求的真正处理中心,也正是在这个HttpHandler容器中,ASP.NET Framework才真正地对客户端请求的服务器页面做出编译和执行,并将处理过后的信息附加在HTTP请求信息流中再次返回到HttpModule中。

 

IHttpHandler是什么

IHttpHandler定义了如果要实现一个HTTP请求的处理所必需实现的一些系统约定。HttpHandler与HttpModule不同,一旦定义了自己的HttpHandler类,那么它对系统的HttpHandler的关系将是“覆盖”关系。

 

IHttpHandler如何处理HTTP请求

当一个HTTP请求经同HttpModule容器传递到HttpHandler容器中时,ASP.NET Framework会调用HttpHandler的ProcessRequest成员方法来对这个HTTP请求进行真正的处理。以一个ASPX页面为例,正是在这里一个ASPX页面才被系统处理解析,并将处理完成的结果继续经由HttpModule传递下去,直至到达客户端。

对于ASPX页面,ASP.NET Framework在默认情况下是交给System.Web.UI.PageHandlerFactory这个HttpHandlerFactory来处理的。所谓一个HttpHandlerFactory,所谓一个HttpHandlerFactory,是指当一个HTTP请求到达这个HttpHandler Factory时,HttpHandlerFactory会提供出一个HttpHandler容器,交由这个HttpHandler容器来处理这个HTTP请求。

一个HTTP请求都是最终交给一个HttpHandler容器中的ProcessRequest方法来处理的。


图1:ProcessRequest方法

 


一个简单的
HttpHandler容器

通过实现IHttpHandler接口可以创建自定义HTTP处理程序,该接口只包含两个方法。通过调用IsReusable,IHttpHandlerFactory可以查询处理程序以确定是否可以使用同一实例为多个请求提供服务。ProcessRequest方法将HttpContext实例用作参数,这使它能够访问Request和Response内部对象。在一个HttpHandler容器中如果需要访问Session,必须实现IRequiresSessionState接口,这只是一个标记接口,没有任何方法。


示例1:

using System;

using System.Collections.Generic;

using System.Text;

using System.Web;

using System.Web.SessionState;

 

namespace MyHandler

{

    /// <summary>

    /// 目的:实现一个简单的自定义HttpHandler容器

    /// 作者:文野

    /// 联系:stwyhm@cnblogs.com

    /// </summary>

    public class MyFirstHandler : IHttpHandler,IRequiresSessionState

    {

        #region IHttpHandler 成员

 

        public bool IsReusable

        {

            get { return true; }

        }

 

        public void ProcessRequest(HttpContext context)

        {

            context.Response.Write("<h1><b>Hello HttpHandler</b></h1>");

            context.Session["Test"] = "测试HttpHandler容器中调用Session";

            context.Response.Write(context.Session["Test"]);

        }

 

        #endregion

    }

}

在Web.config中加入如下配置:

<httpHandlers>

     <add verb="*" path="*" type="MyHandler.MyFirstHandler, MyHandler"/>

</httpHandlers>


 

IHttpHandler工厂

ASP.NET Framework实际不直接将相关的页面资源HTTP请求定位到一个其内部默认的IHttpHandler容器之上,而定位到了其内部默认的IHttpHandler工厂上。IHttpHandler工厂的作用是对IHttpHandler容器进行调度和管理。

IHttpHandlerFactory接口包含两个方法。GetHandler返回实现IHttpHandler接口的类的实例,ReleaseHandler使工厂可以重用现有的处理程序实例。

 

示例2:

using System;

using System.Collections.Generic;

using System.Text;

using System.Web;

 

namespace MyHandler

{

    public class MyHandlerFactory : IHttpHandlerFactory

    {

        #region IHttpHandlerFactory 成员

 

        public IHttpHandler GetHandler(HttpContext context, string requestType, string url, string pathTranslated)

        {

            string fname = url.Substring(url.IndexOf('/') + 1);

            while (fname.IndexOf('/') != -1)

                fname = fname.Substring(fname.IndexOf('/') + 1);

            string cname = fname.Substring(0, fname.IndexOf('.'));

            string className = "MyHandler." + cname;

 

            object h = null;

 

            try

            {

                // 采用动态反射机制创建相应的IHttpHandler实现类。

                h = Activator.CreateInstance(Type.GetType(className));

            }

            catch (Exception e)

            {

                throw new HttpException("工厂不能为类型"+cname+"创建实例。",e);

            }

 

            return (IHttpHandler)h;

        }

 

        public void ReleaseHandler(IHttpHandler handler)

        {

           

        }

 

        #endregion

    }

 

    public class Handler1 : IHttpHandler

    {

        #region IHttpHandler 成员

 

        public bool IsReusable

        {

            get { return true; }

        }

 

        public void ProcessRequest(HttpContext context)

        {

            context.Response.Write("<html><body><h1>来自Handler1的信息。</h1></body></html>");

        }

 

        #endregion

    }

 

    public class Handler2 : IHttpHandler

    {

        #region IHttpHandler 成员

 

        public bool IsReusable

        {

            get { return true; }

        }

 

        public void ProcessRequest(HttpContext context)

        {

            context.Response.Write("<html><body><h1>来自Handler2的信息。</h1></body></html>");

        }

 

        #endregion

    }

}




参考资料

《ASP.NET深入解析》


使用HttpHandler实现文件下载页面 示例: Hello,HttpHandler(最简单的HttpHandler) -------------------------------------------------------------------------------- 示例: 使用HttpHandler实现文件下载页面 -------------------------------------------------------------------------------- 示例: 添加图片访问的HttpHandler,为网站图片提供"水印" 立即下载

相关推荐

虚拟机扩容——非LVM分区

虚拟机扩容——非LVM分区

ytraister的博客 3905

Java-HttpHandler类介绍

在Java中,HttpHandler类是一个接口,它定义了处理HTTP请求的方法。HttpHandler类是Java内置的HTTP服务器API的一部分,它允许开发人员创建自己的HTTP服务器并处理请求。HttpHandler类中最重要的方法是handle(HttpExchange exchange)方法。该方法接收一个HttpExchange对象,该对象表示一个HTTP请求和响应的交换。开发人员可以在handle方法中实现自己的逻辑来处理请求,并生成相应的响应。

架构师之路。。 2251

手把手教你用RSoft BPM仿真一个1x2光分束器:从参数设置到结果分析全记录

本文详细介绍了使用RSoft BPM模块设计和仿真1×2光分束器的完整流程,包括参数设置、结构建模、仿真配置和结果分析。通过实战指南,帮助读者掌握光波导器件的仿真技术,实现50:50功率分配的设计目标,适用于光通信和集成光学领域的研究与应用。

weixin_30545945的博客 545

java httpserver stop_java内置HttpServer服务器的使用

HttpServer是JDK1.6以后内置的HTTP服务器,位置在rt.jar的com.sun.net.httpserver包下。使用HttpServer实现HTTP服务器主要涉及下面几个类:1.HttpServer:表示一个服务器实例,需要绑定一个IP地址和端口号。(HttpsServer是其子类,处理https请求)2.HttpContext:服务器监听器的上下文,需要配置用于匹配URI的公共...

weixin_42509708的博客 1200

4. SAP ABAP OData 服务 Data Provider Class 的 GET_ENTITYSET 方法实现指南

首先第19行CREATEDATA创建er_entityset实例,指定其类型为zcl_zbook_manage_mpc=>tt_book,接着把这个引用映射到刚刚第五行定义的FIELD-SYMBOLS变量上去,这样的话,接下来我们对FIELD-SYMBOLS进行的操作,就会自动反应回引用变量er_entityset.因为我们可能在这个方法里,返回多条图书信息,所以需要用内表类型,而非单条记录的ts_book.ts_book代表一本图书的数据结构。......

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2963

Open3D 读取、保存、显示点云【2025最新版】

paint_uniform_color给所有的点上一个统一的颜色。博客长期更新,本文最近更新时间为:2025年1月1日。

点云侠的博客 37万+

HttpHandler(1)

概述HttpHandler是一个HTTP请求的真正处理中心,也正是在这个HttpHandler容器中,ASP.NET Framework才真正地对客户端请求的服务器页面做出编译和执行,并将处理过后的信息附加在HTTP请求信息流中再次返回到HttpModule中。 IHttpHandler是什么IHttpHandler定义了如果要实现一个HTTP请求的处理所必需实现的一些系统约定。H

853

在SAP系统中创建物料 860000000000000082(物料描述为“8680月球广寒宫坦克车”)时,系统报出了一个错误

摘要:SAP系统创建物料"8680月球广寒宫坦克车"时出现"C+020"错误,提示评估区域C916未在物料分类账中设置为生产性。解决方案需进入"会计-控制-产品成本控制-实际成本核算"路径,将评估区域C916手动设置为生产性状态。该操作需由具备权限的系统管理员或FICO顾问执行,建议操作前进行数据备份或在测试环境验证。完成设置后即可重新创建物料。

金牌架构师 393

httphandler java_HttpHandler和HttpModule 心得介绍

HttpHandler和HttpModule--入门ASP.Net处理Http Request时,使用Pipeline(管道)方式,由各个HttpModule对请求进行处理,然后到达 HttpHandler,HttpHandler处理完之后,仍经过Pipeline中各个HttpModule的处理,最后将HTML发送到客户端浏览 器中。生命周期中涉及到几个非常重要的对象:HttpHandler,Ht...

weixin_30468419的博客 294

Windows 11 安装 JDK 11:下载、安装、配置环境变量、验证

本文详细介绍了在 Windows 11 系统中安装 JDK 11 的完整流程,包括从 Oracle 官网下载压缩包、解压到自定义目录、配置 JAVA_HOME 与 Path 环境变量,并验证安装是否成功。文章还包含一个专为 JDK 11 新特性设计的测试程序,涵盖 Lambda 表达式 var 语法、HTTP 客户端 API、字符串增强方法等,帮助读者确认安装版本正确无误,适合初学者和需要多版本 JDK 共存的开发者参考。

寒水馨 · 轻量级技术文档 · hanshuixin.org 2783

PON架构(全光网络)

目前组网架构世界上有一种最快的速度又是光,以前传统以太网络规划满足不了现在的需求。有线网 无线网 全光网络方案场景 全光网络分类 以太全光网络 PON(Pas-sive-Optical Network 无源光网络) 再典型的中大型高校网络中 推荐万兆入室 千兆到桌面的带宽设计 一般三层 (终端-接入层-汇聚层-核心层-出口(安全设备)-互联网) 单校区核心设备 一般采用两台高性能的核心交换机 双机的方式采用的是 M-LAG 多校区之间核心交换机采用1

qq_56248592的博客 6269

HttpHandler详解

概述 HttpHandler是一个HTTP请求的真正处理中心,也正是在这个HttpHandler容器中,ASP.NET Framework才真正地对客户端请求的服务器页面做出编译和执行,并将处理过后的信息附加在HTTP请求信息流中再次返回到HttpModule中。 IHttpHandler是什么 IHttpHandler定义了如果要实现一个HTTP请求的处理所必需实现的一些系统约定。Ht

Keymo_的奋斗史 1万+

QGIS之七建筑面由DSM和DEM获取高度并可视化

QGIS建筑面由DSM和DEM获取高度并可视化

yilvyangguang520的博客 3511

ashx文件和HttpHandler

ashx文件和HttpHandlerashx 文件用于写web handler的。.ashx必须包含IsReusable. 如下例所示。}.ashx比.aspx的好处在与不用多一个html 注意了VS2005中Web应用程序项目模板里的Generic Handler 项,发现它是一个.ashx文件,实际上它是一个HttpHandler。利用.ashx文件是一个更好的方法,这个文件类

peterlinxt的专栏 5285

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

HttpHandler【转】

转自: http://www.cnblogs.com/stwyhm/archive/2006/08/09/471765.html 文野 概述 HttpHandler是一个HTTP请求的真正处理中心,也正是在这个HttpHandler容器中,ASP.NET Framework才真正地对客户端请求的服务器页面做出编译和执行,并将处理过后的信息附加在HTTP请求信息流中再次返回到HttpModul...

weixin_30699465的博客 120

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

HttpHandler处理

前言:好几天没有写博客了,今天继续写我们的asp.net高级编程基础系列的第十篇,Httphandler处理,通过这篇博客我们可以了解到Httphandler是个干什么的了,当然本来想写写这个底层的,但是想想我们可以自己查一下,所以就没有写了,希望我们能够共同进步。 HttpHandler处理 (1) HttpHandler是对请求的响应,可以输出普通的Html内容,也可以输出图片,也

sundaydashu的专栏 606

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

HTTPModule vs HTTPHandler

直接上结论: HTTPModule:任何请求都将先经过HTTPModule的处理; HTTPHandler:要为请求构造Response时,将根据特定类型的请求调用相应的HTTPHandler。 一、ASP.NET Application Life Cycle Overview 当一个请求到来时,IIS将其分配给ASP.NET Engine,而后这个请求经由Application pipeline经过一系列处理,最终构造对于特定请求的响应,发送给Client。 重要的是这个pipeline。 二、Pipel

u010373266的博客 686

【c#基础3】HttpHandler

http://www.cnblogs.com/stwyhm/archive/2006/08/09/471765.html 概述 HttpHandler是一个HTTP请求的真正处理中心,也正是在这个HttpHandler容器中,ASP.NET Framework才真正地对客

gd2008的专栏 2052

HttpHandler答疑

该篇文章是我于2009年6月10日通过自己编写的工具,批量从位于在博客园的博客站点(http://chenxizhang.cnblogs.com)同步而来。文章中的图片地址仍然是链接到博客园的。特此说明!陈希章 原文地址:http://www.cnblogs.com/chenxizhang/archive/2008/12/23/1360364.html原文标题:HttpHandler

陈希章@中国 414
上一篇: 委托
下一篇: HttpModule是如何工作的
mx5721
博客等级 码龄17年 24粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值