一般处理程序
前序:突然听到”一般处理程序“这个词,突然有种蒙的感觉,这是什么东东??
简介:一般处理程序的一般是相对于aspx页面来说。就是说什么请求都可以处理。正如它的名字,“一般处理程序”,是用来处理一般的web请求的,所谓一般也可以理解为简单,也就是更接近底层的东西。说的通俗一点儿,aspx文件包装 的非常好,处理请求变的很简单,而ashx文件没做啥包装,一切都要靠程序员自己来处理,所以更适合没有回滚需要的简单需求。创建起来也很简单,也就是创建一个类文件,在其中实现IHttpHandler接口就行了。看过ashx常用的几个经典示例,比如图片、二进制文件生成,比如RSS生成等等。
创建aspx:
using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace Linkin.Web.HttpHandler { /// <summary> /// Handler1 的摘要说明 /// </summary> public class Handler1 : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; context.Response.Write("Hello World"); } public bool IsReusable { get { return false; } } } }
以上为刚创建的一个空的‘一般处理程序’,包含2个固定的方法。可以正常运行,运行时直接 空间名/类名.ashx即可
分析:
打开网页,不管我们请求的是静态资源还是动态 资源,IIS都会根据ISAPI(微软和Process软件公司联合提出的Web服务器上的API标准)这一标准,将请求的文件根据文件后缀名的不同,转 交给不同的处理程序。打开IIS可以看到,大部分文件都交给了aspnet_isapi.dll进行处理,但是aspnet_isapi.dll不可能对 所有文件都进行一样方式的处理。
为了了解aspnet_isapi.dll如何进行进一步处理的,我们可以打开C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\Web.config文件。可以看到,在<httpHandler>节点中将不同的文件类型映射给不同的handler去处理(为了方便截图,删掉了一部分映射)。
实现:
在项目的web.config中加入配置:
<system.web>
<httpHandlers>
<add verb="*" path="*.jpg" type="Houses.Web.Upload.ImageHandler, Houses.Web" /> //当程序遇到.jpg的图片时,即会直接走Houses.Web.Upload.ImageHandler程序
</httpHandlers>
</system.web>
加入配置后,运行项目出现配置错误,只能说明是你的Handler文件有问题。仔细检查一下Handler的class名字是否正确。
推荐文章:http://www.cnblogs.com/JimmyZhang/archive/2007/09/15/894124.html