ashx 文件用于写web handler的。.ashx必须包含IsReusable. 如下例所示。}.ashx比.aspx的好处在与不用多一个html 注意了VS2005中Web应用程序项目模板里的Generic Handler 项,发现它是一个.ashx文件,实际上它是一个HttpHandler。利用.ashx文件是一个更好的方法,这个文件类似于.aspx文件,可以通过它来调用HttpHandler类,从而免去了普通.aspx页面的控件解析以及页面处理的过程。然后在同目录下,使用解决方案资源管理器,使用"添加"-->"添加类",在类文件名处输入"TextBuilder.ashx.cs"。使用IE测试,输入这个.ashx的地址即可

什么是HttpHandler

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

{

///

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

/// 作者:文野

/// 联系:stwyhm@cnblogs.com

///

public class MyFirstHandler : IHttpHandler,IRequiresSessionState

{

#region IHttpHandler 成员

public bool IsReusable

{

get { return true; }

}

public void ProcessRequest(HttpContext context)

{

context.Response.Write("

Hello HttpHandler

");

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

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

}

#endregion

}

}

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

< span>httpHandlers>

IHttpHandler工厂

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

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

示例2:

示例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("

来自Handler1的信息。

");

}

#endregion

}

public class Handler2 : IHttpHandler

{

#region IHttpHandler 成员

public bool IsReusable

{

get { return true; }

}

public void ProcessRequest(HttpContext context)

{

context.Response.Write("

来自Handler2的信息。

");

}

#endregion

}

}

ashx文件和HttpHandler相关推荐

  1. ASP.NET的SEO:使用.ashx文件——排除重复内容

    本系列目录 不同的链接指向的页面如果具有大量相同的内容,这种现象就会被称为"重复内容",如果一个网站的重复内容很多,搜索引擎就会认为这个网站的价值不高.所以我们应尽量避免各种重复内 ...

  2. ashx文件的几种使用

    一提到Ashx文件,我们就会想到http handler以及图片加载(在之前我们一般使用ASPX或者Webservice去做),一般做法如下: Handler.ashx: <%@ WebHand ...

  3. ASP.NET大闲话:ashx文件有啥用

    在VS中右击项目,添加新项,我们找到.ashx文件在新建项模板中叫做"一般处理程序",那么这个一般处理程序用来干吗的呢? 我们可以这样地简单理解,嗯,不需搞得太复杂,它就类似.as ...

  4. jquery访问ashx文件示例

    .ashx 文件用于写web handler的..ashx文件与.aspx文件类似,可以通过它来调用HttpHandler类,它免去了普通.aspx页面的控件解析以及页面处理的过程.其实就是带HTML ...

  5. ashx需要编译吗_ashx介绍以及ashx文件与aspx文件之间的区别

    ashx是什么文件? .ashx 文件用于写web handler的..ashx文件与.aspx文件类似,可以通过它来调用HttpHandler类,它免去了普通.aspx页面的控件解析以及页面处理的过 ...

  6. Ashx文件的使用方法

    一提到Ashx文件,我们就会想到http handler以及图片加载(在之前我们一般使用ASPX或者Webservice去做),一般做法如下: Handler.ashx: <%@ WebHand ...

  7. ashx 文件怎么用

    本文导读:ashx是什么文件,如何创建 .ashx 文件用于写web handler的.其实就是带HTML和C#的混合文件..ashx文件类似于.aspx文件,可以通过它来调用HttpHandler类 ...

  8. ashx PHP文件 优劣,.NET_ashx介绍以及ashx文件与aspx文件之间的区别,ashx是什么文件? .ashx 文件用于 - phpStudy...

    ashx介绍以及ashx文件与aspx文件之间的区别 ashx是什么文件? .ashx 文件用于写web handler的..ashx文件与.aspx文件类似,可以通过它来调用HttpHandler类 ...

  9. ashx介绍以及ashx文件和aspx文件区别

    ashx是什么文件? .ashx 文件用于写web handler的..ashx文件与.aspx文件类似,可以通过它来调用HttpHandler类,它免去了普通.aspx页面的控件解析以及页面处理的过 ...

最新文章

  1. ldconfig动态链接库管理以及修改ld.so.conf.d
  2. python之路---装饰器函数
  3. mysql注入绕过单引号_SQL注入-绕过过滤规则
  4. ASP.Net中OnBeforeUnLoad事件中调用__doPostBack不起作用?
  5. 5G通信的一些关键技术
  6. java 泛型 擦除_Java泛型和类型擦除
  7. 推荐一款shell自定义提示符Sexy Solarized Bash Prompt
  8. 计算机组成原理完整学习笔记(三):存储器
  9. linux低级格式化工具下载,硬盘低格工具(Hard Disk Low Level Format Tool)
  10. 苹果ios8_一款苹果手机上目前体验还不错的免费小说软件,支持一键缓存
  11. VRP--车辆路径问题 c++
  12. python爬取大众点评数据_小试Python——爬虫抓取大众点评上的数据
  13. Minor GC ,Full GC 触发条件
  14. 和python哪个容易胖_哪些吃了最容易长胖呢?
  15. MindManager带你走进三顾茅庐
  16. 计算机专业优势及就业前景,女生学习计算机专业的优势及就业前景
  17. 解决Unable to open debugger port错误
  18. vcs 覆盖率收集2——覆盖率选项 + 合并覆盖率
  19. python 计算一年内的所有周的具体日期
  20. 【平面解析几何】直线方程的表示形式

热门文章

  1. linux深度定制,Linux Deepin 12.06 beta1 发布
  2. 当程序员的一个人无聊时,甚至用Python开发出机器人看他们聊天
  3. layui 横向表单_对layui中表单元素的使用详解
  4. 初识python必知的6个知识点
  5. 【Java】找到链表中倒数第k个结点
  6. poj2195(最大权完美匹配)
  7. codeforces 337D:树形dp[能到最远的一定可以到其他点]
  8. 欧拉降幂 ---- 2020 杭电多校[E - Fibonacci Sum]+欧拉降幂+和式的调整+二次剩余+毒瘤卡常
  9. 一文让你完全弄懂回归问题、激活函数、梯度下降和神经元模型实战《繁凡的深度学习笔记》第 2 章 回归问题与神经元模型(DL笔记整理系列)
  10. UVA816 Abbott的复仇 Abbott's Revenge(final的BFS)(真•答案)