本文内容

  • 引入
  • IHttpHandler 概述
  • 演示创建自定义 HTTP 处理程序
  • 创建自定义 HTTP 处理程序
  • 映射文件扩展名
  • 测试自定义 HTTP 处理程序
  • 参考资料

引入

当新建一个名为 WebForm1 的 .aspx 文件后,这个页面相应的 .aspx.cs 文件内容如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
 
namespace HttpHandlerDemo
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
 
        }
    }
}

任何人对这个页面再熟悉不过。但更进一步,这个后台文件继承 System.Web.UI.Page 类,而该类又继承 System.Web.UI.TemplateControl 类和 System.Web.IHttpHandler 接口。值得注意的是 IHttpHandler。

本文在 VS 2008 和 IIS 6 环境下概述如何利用 IHttpHandler 自定义 HTTP 处理程序。

本文重在工程实践,以实践看理论,这多少符合点参加工作的人实际情况。我是比较讨厌大段大段的文字描述和理论的。虽然写得简单,但若深究下去涉及的问题实在很多,随便写点什么,都可以成为专门的主题。

在网上或是群里看到太多人问得问题,一是自己不思考,稍微遇到点问题,就迫切寻求他人帮助;二是基础太差,知识量不够,或是知道的过于肤浅。这些都是阻碍自己进步的巨大障碍。

在本文的描述中,希望能体会、意识到 IHttpHandler 能做什么、能为你的项目做什么。

学习的过程不能一蹴而就,起初你只是知道一个个信息点,一个个实现方式,但若坚持下去,认真思考它们内在的东西,最终这些信息在你脑中会形成一个体系。

IHttpHandler 概述

IHttpHandler 是 ASP.NET 提供一个底层的请求/响应 API,使开发人员可以利用 .NET Framework 为到来的 HTTP 请求服务。因此,你可以创建自己的 HTTP 处理程序,将自定义输出呈现给浏览器。

ASP.NET HTTP 处理程序是响应对 Web 应用程序的请求而运行的过程。最常见的处理程序是处理 .aspx 文件的 ASP.NET 页处理程序。用户请求 .aspx 文件时,页面通过页处理程序来处理请求。

自定义 HTTP 处理程序通常具有以下用途:

  • RSS 源。若要为网站创建 RSS 源,可以创建一个可发出 RSS 格式 XML 处理程序。然后将文件扩展名,如 .rss,绑定你自定义的处理程序。当用户向站点发送以 .rss 结尾的请求时,ASP.NET 将调用你自定义的处理程序来处理该请求。
  • 图像服务器。如果希望 Web 应用程序能够提供不同大小的图像,可以编写一个自定义处理程序来调整图像大小,将调整后的图像作为处理程序的响应发送给用户。

除了 ASP.NET 页面处理程序外,ASP.NET 还有其他几种内置的处理程序。如下表所示:

处理程序 说明
ASP.NET 页处理程序 (*.aspx) 用于所有 ASP.NET 页的默认 HTTP 处理程序。
Web 服务处理程序 (*.asmx) 在 ASP.NET 中作为 .asmx 文件创建的 Web 服务页的默认 HTTP 处理程序。
泛型 Web 处理程序 (*.ashx) 不含 UI 和包括 @ WebHandler 指令的所有 Web 处理程序的默认 HTTP 处理程序。
跟踪处理程序 (trace.axd) 显示当前页跟踪信息的处理程序。

演示创建自定义 HTTP 处理程序

创建自定义 HTTP 处理程序

若要创建自定义 HTTP 处理程序,需要创建实现 IHttpHandler 接口的类。这是一个同步处理程序(实现 IHttpAsyncHandler 可以创建一个异步处理程序,两种处理程序接口都要求您实现 IsReusable 属性和 ProcessRequest 方法)。

  • IsReusable 属性指定 IHttpHandlerFactory 对象(实际调用适当处理程序的对象)是否可以将处理程序放置在池中,并且重新使用它以提高性能。如果处理程序不能放在池中,则在每次需要处理程序时工厂都必须创建处理程序的新实例。
  • ProcessRequest 方法负责处理单个 HTTP 请求。

HTTP 处理程序有权访问应用程序上下文。其中包括请求用户的标识(如果已知)、应用程序状态和会话信息。当请求 HTTP 处理程序时,ASP.NET 将调用相应处理程序的 ProcessRequest 方法。您在处理程序的 ProcessRequest 方法中编写的代码将创建一个响应,此响应随后发送回请求浏览器。

如下所示创建一个名为 HelloWorldHandler 的处理程序:

using System;
using System.Web;
 
namespace HttpHandlerDemo
{
    public class HelloWorldHandler : IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
        {
            HttpRequest Request = context.Request;
            HttpResponse Response = context.Response;
            Response.Write("<html>");
            Response.Write("<body>");
            Response.Write("<h1>Hello from a synchronous custom HTTP handler.</h1>");
            Response.Write("</body>");
            Response.Write("</html>");
        }
 
        public bool IsReusable
        {
            get
            {
                return true;
            }
        }
    }
}

映射文件扩展名

HelloWorldHandler 处理程序可以响应尚未在 IIS 和 ASP.NET 中映射的任何文件扩展名。

为了使 ASP.NET 了解为你的自定义文件扩展名使用哪个处理程序,在 IIS 中必须将该扩展名映射到 ASP.NET。然后在应用程序中必须将该扩展名映射到自定义处理程序。

如下所示:

<httpHandlers>
  <add verb="*" path="*.sample" type="HttpHandlerDemo.HelloWorldHandler"/>
</httpHandlers>

测试自定义 HTTP 处理程序

这样,当你输入 http://localhost/mytest.sample,任何以 .sample 结尾的请求时,都会调用 HelloWorldHandler 处理程序。

运行结果:

参考资料

MSDN HTTP 处理程序和 HTTP 模块概述 http://msdn.microsoft.com/zh-cn/library/bb398986(v=VS.90).aspx

.NET Framework IHttpHandler http://msdn.microsoft.com/zh-cn/library/system.web.ihttphandler(v=VS.90).aspx

下载 Demo

转载于:https://www.cnblogs.com/liuning8023/archive/2011/11/29/2268445.html

利用 IHttpHandler 自定义 HTTP 处理程序相关推荐

  1. Dataset:数据生成之利用pandas自定义生成随机各自类型(离散型和连续型)的dataframe数据

    Dataset:数据生成之利用pandas自定义生成随机各自类型(离散型和连续型)的dataframe数据 目录 数据生成之利用pandas自定义生成随机数据 输出结果 实现代码 数据生成之利用pan ...

  2. DL之DNN:利用numpy自定义三层结构+softmax函数建立3层完整神经网络全部代码实现(探究BP神经网络的底层思想)

    DL之DNN:利用numpy自定义三层结构+softmax函数建立3层完整神经网络全部代码实现(探究BP神经网络的底层思想) 目录 输出结果 代码实现 输出结果 代码实现 #DL之NN:利用numpy ...

  3. TF之LiR:利用TF自定义一个线性分类器LiR对乳腺癌肿瘤数据集进行二分类预测(良/恶性)

    TF之LiR:利用TF自定义一个线性分类器LiR对乳腺癌肿瘤数据集进行二分类预测(良/恶性) 目录 输出结果 设计思路 核心代码 输出结果 设计思路 核心代码 X_train = np.float32 ...

  4. [WCF权限控制]利用WCF自定义授权模式提供当前Principal[实例篇]

    在<原理篇>中我们谈到:如果采用自定义安全主体权限模式,我们可以通过自定义AuthorizationPolicy或者ServiceAuthorizationManager实现对基于当前认证 ...

  5. 利用alias自定义快捷命令

    身为开发人员,不可避免地经常需要进入几个常用的目录进行开发,如果目录太深,经常敲一串路径(例如: cd /path/to/my/work/directiron),着实麻烦.可利用alias自定义一些快 ...

  6. [WCF权限控制]利用WCF自定义授权模式提供当前Principal[原理篇]

    在<通过扩展自行实现服务授权>一文中,我通过自定义CallContextInitializer的方式在操作方法之前之前根据认证用户设置了当前线程的安全主体,从而实现授权的目的.实际上,WC ...

  7. CSS设置下划线对齐方式,如何巧妙利用CSS自定义网页下划线样式

    如何巧妙利用CSS自定义网页下划线样式 CSS为网页设计者们提供了丰富而灵活的页面元素表现形式的控制手段.但是,或许你可能注意到了,对于下划线,CSS提供的可选操作却不是很多.一般情况下,人们看到的下 ...

  8. 利用ASP.NET一般处理程序动态生成Web图像(转)

    摘自:http://www.cnblogs.com/zhouhb/archive/2011/02/15/1955262.html 一般处理程序的扩展名为ashx,它实现了IHttpHandler接口, ...

  9. 像@Transactional一样利用注解自定义aop切片

    在spring中,利用@Transactional注解可以很轻松的利用aop技术进行事物管理.在实际项目中,直接利用自定义注解实现切片可以大大的提高我们的编码效率以及代码的简洁性. 实现以上的目标,主 ...

最新文章

  1. 算法(2)KMP算法
  2. php 嵌套while循环,PHP/SQL在嵌套while循环中替代db调用
  3. 台湾高校首创气体灭火数位实境教育馆
  4. Exchange 默认数据库删除问题
  5. android 环信消息红点,环信3.0获取会话消息列表
  6. 使用LSTM建立seq2seq模型进行语言翻译
  7. MySQL的timestamp类型自动更新问题
  8. 2016/11/14
  9. 从xls或者txt等格式的文件中读取编码码率以及PSNR
  10. Ubuntu下安装VirtualBox和Android 安装到虚拟机中
  11. 怎么用Excel来批量生成SQL语句
  12. 以删除重建的方式修复托管磁盘虚拟机
  13. 微信小程序、前端:背景图片样式拉伸不变形
  14. word中突然有一行文字间距特别大的解决办法
  15. 转-STAF学习使用总结一
  16. 1.ROS编程学习:helloworld的c++与python实现
  17. Scipy_常用统计函数
  18. php网站 域名授权 怎么破,使用php进行域名授权代码 - 小俊学习网
  19. Qt5气泡式聊天框——QListWidget+QPainter实现
  20. java nio 框架_几种Java NIO框架的比较(zz)

热门文章

  1. Java记录 -38- 随机数
  2. oracle pipelined返回值函数 针对数据汇总统计 返回结果集方法
  3. 开源CMS webEdition 6发布
  4. Android SDK目录结构介绍
  5. AndroidManifest Intent-Filter Action android:name属性
  6. Hierarchy-Viewer架构
  7. Eclipse jar包打不进apk
  8. 微信小程序云开发不完全指北
  9. ELK技术栈—Logstash—Input插件
  10. 数据库性能优化—全局优化思路