声明:本文为翻译文章,如有侵权,请告知,我将会在1个工作日内删除,谢谢.

★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆

总是想着展翅飞翔,但是却不料一直受伤,但是那寻梦的心啊,永远向往着远方.

★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆

  在本文中,我将详细的向各位讲解httphandlers的一般扩展使用方法,以及在何种场合下使用这个方法.首先,需要说明的是,httphandlers是一个继承自System.IHttpHandler接口的.net组件.她可以通过同步HttpHandler或者是异步HttpHandler的方式被扩展. 一个同步的HttpHandler应当继承自System.Web.IHttpHandler接口,然而一个异步的HttpHandler却继承自System.Web.IHttpAsyncHandler接口.在本文中,我讲重点讲解同步HttpHandler的使用方法.那么,下面首先要探讨的是IHttpHandler接口和她的各类成员.           ※ProcessRequest() 这个方法是HttpHandler的核心,她处理所有通过HttpHandler的请求.

※IsReusable() 这个属性用来区别IHttpHandler是否能够再次处理相同的请求. 所以,如果扩展HttpHandler的时候,那么上面的方法和属性必须被实现.

怎么样来实现?

我下面将会结合着一个例子来说明在一个一般的项目中,我们该在哪儿来使用HttpHandler.现在假设我们正在开发一个项目,而这个项目需要处理成千上万的图片.这些相对来说还是比较简单的,但是难就难在,我们如何在数据库的BLOB字段中提取出所有的图片,然后展示出来.一般来说,为了处理这些,我们会建立一个新的页面,然后将这些图片以字节流的方式从数据库中提取出来.生成的代码可能如下:

imImage.ImageUrl = "~/ImageHandler.aspx?ImID=100;

在上面,imImage就是一个图片控件,同时ImageHandler.aspx的代码如下:

string imageid = context.Request.QueryString["ImID"];

SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString);

connection.Open();

SqlCommand command = new SqlCommand("select Image from Image where ImageID="+imageid, connection);

SqlDataReader dr = command.ExecuteReader();

dr.Read();

context.Response.BinaryWrite((Byte[])dr[0]);

connection.Close();

context.Response.End();

如果我们考虑着使用上面的代码段来让一个aspx页面去操作一个单独的数据库连接的话,那么页面上其他的内容的展示将显得不是那么重要了. 同时,一个aspx页面本身就有一系列的从Init开始到Unload结束的事件,这些事件都是在这个简单的数据库操作之前发生的.所以,如果我们利用上面的方法来试着展示更多的图片到一个页面上,她的效率的高低,你是懂的. 那么如何来解决这个呢?是时候该HttpHandler出场了.众所周知,和aspx页面请求顺序比起来,HttpHandler的请求正好是相反的,她在请求的末端被执行.由于HttpHandler只有一个可以处理简单操作的ProcessRequest的方法,所以,她是不会加载那么多事件的. 但是ProcessRequest方法是如何响应Response对象的呢?

  让我们先看看ProcessRequest:

  public void ProcessRequest (HttpContext context) { }

  在上面,context对象有权限进入请求的主对象中.比如当我们利用Response对象进行写字节流的时候,当然,在其他的一些场合下,我们也可以利用HttpHandler,比如如果我们想把DataSet中的内容导出到Excel中,同时我们想保存在我们自定义的文件格式,比如说是.axd,那么我们就必须在配置文件中进行正确的配置才行.

<httpHandlers>

<add verb="supported http verbs" path="path" type="namespace.classname, assemblyname" />

<httpHandlers>

上面种,verb代表着请求方式,如”GET,POST”,path可以写成”.axd”,type则是实际的Handler类型.

  利用vs2005开发一个HttpHandler

  首先,创建一个新的WebApplication工程,然后添加一个一般处理程序即可,代码如下:

 using System;

  using System.Web;
  using System.Configuration;

  using System.Data.SqlClient;

  public class ImageHandler : IHttpHandler

  {

    public void ProcessRequest (HttpContext context)

    {

      string imageid = context.Request.QueryString["ImID"];

      SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString);

      connection.Open();

      SqlCommand command = new SqlCommand("select Image from Image where ImageID="+imageid, connection);

      SqlDataReader dr = command.ExecuteReader();

      dr.Read();

      context.Response.BinaryWrite((Byte[])dr[0]);

      connection.Close(); context.Response.End();

    }

    public bool IsReusable

    {

      get { return false; } }

    }

   可以利用如下代码展示图片: imImage.ImageUrl = "~/ImageHandler.ashx?ImID=100;

HttpHandler浅析相关推荐

  1. ashx PHP文件 优劣,.NET_后缀为 ashx 与 axd 的文件区别浅析,唯一不同的地方是:axd扩展名 - phpStudy...

    后缀为 ashx 与 axd 的文件区别浅析 唯一不同的地方是:axd扩展名的必须要在web.config中的中进行注册,而ashx直接在项目中当成aspx那样添加使用即可. 所以在项目的添加文件中, ...

  2. 从源码浅析MVC的MvcRouteHandler、MvcHandler和MvcHttpHandler

    熟悉WebForm开发的朋友一定都知道,Page类必须实现一个接口,就是IHttpHandler.HttpHandler是一个HTTP请求的真正处理中心,在HttpHandler容器中,ASP.NET ...

  3. 编写轻量ajax组件02-AjaxPro浅析

    前言 上一篇介绍了在webform平台实现ajax的一些方式,并且实现一个基类.这一篇我们来看一个开源的组件:ajaxpro.虽然这是一个比较老的组件,不过实现思想和源码还是值得我们学习的.通过上一篇 ...

  4. 浅析 JavaScript 中的 函数 uncurrying 反柯里化

    柯里化 柯里化又称部分求值,其含义是给函数分步传递参数,每次传递参数后部分应用参数,并返回一个更具体的函数接受剩下的参数,这中间可嵌套多层这样的接受部分参数函数,直至返回最后结果. 因此柯里化的过程是 ...

  5. 浅析Python中bytes和str区别

    本博转载自:Chown-Jane-Y的浅析Python3中的bytes和str类型 Python 3最重要的新特性之一是对字符串和二进制数据流做了明确的区分.文本总是Unicode,由str类型表示, ...

  6. 学习《Linux设备模型浅析之设备篇》笔记(深挖一)

    这篇文章既然说了是浅析,那就是跳过了一些东西,我们把这些跳过的东西给它尽可能的补回来 今天登陆 lxr.free-electrons.com 发现内核版本已经升级到3.15了,那以后都使用3.15的源 ...

  7. 学习《Linux设备模型浅析之设备篇》笔记(一)

    最近在学习Linux设备模型,前面几篇文章也是读这篇的时候遇到问题,然后为了搞清楚先转去摸索才写出来的. 当然了,刚开始是先读到<Linux那些事儿之我是Sysfs>,搞不清楚才去读的&l ...

  8. ASP.NET的(HttpModule,HttpHandler)

    在以前的ASP时候,当请求一个*.asp页面文件的时候,这个HTTP请求首先会被一个名为inetinfo.exe进程所截获,这个进程实际上就是www服务.截获之后它会将这个请求转交给asp.dll进程 ...

  9. ASP.NET 2.0 HttpHandler实现生成图片验证码(示例代码下载)

    学习整理了一下 (一).功能 用HttpHandler实现图片验证码 (二).代码如下 1. 处理程序文件 ValidateImageHandler.ashx代码如下  1 <%@ WebHan ...

最新文章

  1. git查看某个文件的提交历史
  2. UA MATH574M 统计学习V Variable Selection简介
  3. css --- 使用媒体查询当屏幕宽度小于某个值时,隐藏掉某个类
  4. element-ui组件中的input等的change事件中传递自定义参数
  5. 巨杉数据库 CTO 王涛:新一代分布式数据库
  6. linux下iwconfig命令参数
  7. 决策树(三)--完整总结(ID3,C4.5,CART,剪枝,替代)
  8. ListView和条目点击事件、条目长按事件
  9. 在阿里云服务器发邮件
  10. contourf()绘制填充颜色的二维等高线图
  11. VS 2017 解决 C2001错误 常量中有换行符
  12. ❤️学习linux 两年多沉淀下来的linux 命令大全⭐建议收藏⭐
  13. Fiddler抓包学习笔记
  14. 看了100%会做艺术二维码的制作教程
  15. 伦敦金走势实时与前瞻
  16. 蓝桥杯试题:振兴中华(C/C++)
  17. 串口通讯基本原理 【详细】
  18. docker可视化管理工具
  19. dsy 1002 轮状病毒
  20. 八位二进制转化为十进制

热门文章

  1. Android GridView LruCache
  2. 提高关键词排名的28个SEO技巧
  3. avalon2学习教程15指令总结
  4. Android 编程下设置 Activity 切换动画
  5. [导入]ASP.NET MVC的WebSite模式(with mvc membership)
  6. 需求工程阅读笔记03
  7. wget整站抓取、网站抓取功能;下载整个网站;下载网站到本地
  8. 【Android Studio】查看源码时提示“throw new RuntimeException(Stub!)”
  9. Leetcode: Valid Parentheses
  10. c# 类的基本知识,未完,待续