ASP.NET 用虚拟路径代替参数。这种技术其实并不是网页本身需要的,用querystring的效果其实是完全一样的。那我们费那个劲干什么呢?一句话,为了Google。
留心过有关Google文章的朋友都知道一点,静态地址的网页在Google里总是优先于带Querystring参数的。原理上讲,Google觉得那样的网页是经常变化的,查询结果的有效性比较差,可能一会儿就变化了。一般意思上的次序这样的:
http://www.msn.com/index.htm > http://www.msn.com/index.aspx > http://www.msn.com/index.aspx?id=1
所以就有了虚拟路径来替代参数这一说,好让自己的排名在Google里提前。看看我们CSDN用的.Text也是这么做的。我的这一个blog的地址是:http://blog.csdn.net/dawave/archive/2004/08/07/68322.aspx,仔细一看,大家就发现 2004/08/07/68322 其实是参数。20004/08/07 是日期,68322 是文章的ID号。大家可以阅读.Text的源代码研究。如果,觉得那个太复杂,看下面我的例子。
因为内容比较多,也向上次(Eclipse, Lomboz & Tomcat)一样,要分几次写完。
环境 .NET 加 IIS
基本的开发概念你要具备,比如,在IIS里建一个Application,知道在哪里找到web.config文件,编译你的C#文件并放在正确的位置,编辑ASPX文件。这些细节我就一笔带过了,希望你已经知道怎么处理了,不然的话,请参考有关ASP.NET的入门教程。
为什么我们不讲VS .NET?因为它不是免费的自由软件,不能保证每个人都能得到它,如果以他为基础的话,那些没钱用VS .NET的朋友就一头雾水了。
首先我们讲handler,ASP.NET用handler来处理一些类似filter,或者listener的任务,一个最简单的handler程序是这样的:
namespace test
{
public class TestHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
context.Server.Transfer("../index.aspx?from=myhandler");
}
public bool IsReusable
{
get { return true; }
}
}
}
至少两个函数是必需的:ProcessRequest, IsReusable。上面这个handler把它接到的request全部转到上级目录的index.aspx。编译这个handler并把它放到bin目录下。大家记得要先放一个index.aspx在那里,不然测试的时候显示文件找不到,还以为是handler出错。
关于网页转向,这里有一点要注意:其实有两种转向的方法,transfer和redirect,transfer发生在服务器端,redirect发生在client端。这就是为什么transfer转向的时候,你的IE地址栏不发生变化,而redirect转向的时候,新地址显示在地址栏里了。我们要求我们的网页没有参数,就必须使用transfer,而不能用redirect,从技术上讲,transfer还比redirect要快一些。
接下来的事情要修改web.config,在System.Web段里,加上下面的内容:
< httpHandlers >
< add verb="*" path="test/*.aspx" type="Test.TestHandler,Test" / >
< /httpHandlers >
它告诉IIS碰到test目录下所有的aspx文件,由我们的testHandler来处理。
测试:打开IE,输入localhost/test/abc.aspx,应该转到你的application 目录中的index文件了。
index里你可以这样测试,简单的加一个< % Request["from"] % >,让handler传过来的参数显示在屏幕上。
再此发表的有关 ASP.NET handler 系列的文章均属本人原创,转摘或引用请注明出处。
下次介绍在handler里处理处理参数