2005-5-29+ 认识httphandler

httphandler是做什么的?用任何一个搜索引擎都可以找到一大堆资料,我就不多说了,把我今天学习的一些认识写在这里,希望可以从另一个侧面让大家认识httphandler。
所谓httphandler,其实是.net用来处理页面请求的。大家可以想想,forms验证所能保护的只是.aspx后缀的文件,而.config后缀的文件是不可访问的。所有这些都是由asp.net内置的一些httphandler处理的。而我们之所以要学习使用httphandler,主要是因为我们想自己来处理一些http请求。
从google上搜索"httphandler .net",大概搜到的httphandler的用途有:
1.防止盗链。主要是防止图片的盗链。
2.使用url重写。这个我还没有仔细看,大概的意思就是可以使Url转向正确的地址,比如说把很长的url变短,使不存在的url转到提示错误或默认的地址。
3.执行一些短小方便的作用。比如有的文章说使用httphandler来实现注销功能。
4.等等等等
作为asp.net的http处理的核心之一,httphandler的作用自然不止这些。我最近要学httphandler主要是因为我找的工作(要毕业了,Hoho...)要使用这个来处理自定义的后缀名的文件,形如http://localhost/hello.notus这样的网页,站内所有页面的后缀名都使用.notus,为的是使用自定义的页面生成方法(主要是在生成页面的时候使用了xml+xslt)。
上面说了一些httphandler的作用,下面把今天学习的内容下下来,我敢说下面肯定有你需要的东西,因为这个东西我是好久才悟出来的(什么,大家当时一看就知道了?难道我真的是最笨的?)
查阅.net sdk 文档,你会发现有IHttpHandler和IHttpHandlerFactory,前面的是自定义httphandler所需要实现的接口,后面的是是自定义返回httphandler的工厂所需要实现的接口,这两个东西在web.config中的注册方法都是一样的。对于前者,很好理解,那后面的工厂是做什么的?
答案自然是返回一个httphandler(……)。
返回的httphandler是做什么的?
答案是用来处理当前的http请求。
既然都是处理当前的http请求,那为什么不直接用IHttpHandler?
不知道。
工厂是什么?
是工厂模式吧?
工厂模式是做什么的?
可以根据客户需要返回合适的产品。
那IHttpHandlerFactory的作用是什么?
嗯,根据当前的http请求返回合适的HttpHandler。

看到了吧,就是这个意思哦。比如说要对http://localhost/hello.notus这个url进行特别的处理,那当请求这个Url时,工厂就单独返回处理hello的HttpHandler,而是其它的url时,就返回一个通用的HttpHandler
下面是简单的代码示例:
System.Web.IHttpHandler GetHandler(System.Web.HttpContext context, string requestType, string url, string pathTranslated)
{
//文件的全名
string fname=url.Substring(url.LastIndexOf("/")+1);
//文件名
string cname=fname.Substring(0,fname.IndexOf("."));

//根据需要返回合适的HttpHandler
if(cname=="hello")
return new HandlerHello();
else
return new HandlerCommon();
}

posted on 2006-07-05 18:42  Notus|南色的风  阅读(737)  评论(0编辑  收藏  举报