您的位置:首页 > 编程语言 > ASP

在ASP.NET中实现简单的URL重写

2007-03-28 17:08 274 查看
最近用ASP.NET写一个小网站程序,需要实现URL重写。在ASP.NET中实现URL重写算是一个古老的话题了,在微软的MSDN中也有文章专门讨论这个问题,文章地址为:
http://www.microsoft.com/china/msdn/library/webservices/asp.net/URLRewriting.mspx,在微软的解决方法中,开发人员需要自己编程实现HTTP模块和HTTP处理程序,此外还要修改配置文件,虽然不复杂,但也要写一些代码。我是一个喜欢偷懒的程序员,而且对ASP.NET编程不很熟悉,网站又小,因此我想出了一个简单方法来实现URL重写。
首先看看URL重写的目的,URL重写的最终目标就是把难懂的充满"&?"符号的带参数的URL地址改变成自然的易于人类理解的结构简单的URL地址。可以认为所有能达到这种结果的手段就是URL重写。
比如一个页面地址“http://server/customers.aspx?region=地区名称” ,它显示的是指定地区的客户列表,用户直接输入 "http://server/customers/地区名称"的样式,则经过URL重写,它转换为 "http://server/customers.aspx?region=地区名称",例如客户端为 "http://server/customers/东北.aspx",服务器端最终执行的是"customers.aspx?region=东北",URL重写使得WEB应用程序的URL人性化,提高程序的用户可用性。
但符号"/"是一个特殊字符,可以解释为操作系统目录分隔符,URL重写时可能需要对此有所判断,我不想判断,于是没有"/"符号,而采用其他的重写方式,比如用户输入"http://server/东北客户.aspx",则重写为"customers.aspx?region=东北",这样重写方式简单,程序判断起来也容易。不需要编程实现HTTP模块,无需修改配置文件,实现了customers.aspx 后,只要在 Global.asax 中添加以下代码

protected void Application_BeginRequest(Object sender, EventArgs e)
{
string name = base.Request.FilePath ;
if( name != null )
{
int index = name.LastIndexOf('/');
if( index >= 0 )
name = name.Substring( index + 1 );
index = name.LastIndexOf('\\');
if( index >= 0 )
name = name.Substring( index + 1 );
index = name.LastIndexOf('.');
if( index >= 0 )
name = name.Substring( 0 , index );
name = name.Trim() ;
// 此处 name 就是请求地址的简单名称
if( name.EndsWith("客户"))
{
name = name.Substring( 0 , name.Length - 2 );
base.Context.RewritePath( "customers.aspx?region=" + System.Web.HttpUtility.UrlEncode( name ) );
// 若使用 Response.Redirect 则会导致客户的IE地址栏输入的地址突变
//base.Context.RewritePath( "customers.aspx?region=" + name , true );
}
}
}
这种方法只使用了几十行代码就实现了简单的URL重写,无需实现各种接口,无需修改配置文件,实在是方便,我的懒惰的欲望得到了满足。

不过这是一种简单的URL重写方法,只能处理简单的问题,若需要实现复杂的URL重写,则还是推荐大家看看微软提出的URL重写方案。

在此提供一个实现简单URL重写的ASP.NET演示程序下载(/Files/xdesigner/URLRewriteDemo.rar) 。这个演示程序需要注意,对于ASP.NET,若URL参数中包含中文则可能出现问题,需要修改web.config 中的 globalization 元素的 requestEncoding 属性值为 "gb2312" ,但若使用URL重写则不存在这种问题。

袁永福(http://www.xdesigner.cn) 2007-3-28
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: