1.3URL重写功能
URL重写功能就是接受带有有效命名约定的URL,把它们转化为
查询字符串。需要有效命名约定的两个原因是:将信息组织到逻辑层次结构中,以及隐藏查询字符串参数。本节将说明URL重写功能如何改进用户界面,描述实现URL重写功能的新旧方式,并给出一些代码来演示这个概念。
注意:
本节还添加了一些代码,来演示n层体系结构和数据绑定过程中的最佳实践方式,而不是使用较简单的数据源控件。
1.3.1为什么要重写URL
看看博客是如何按时间组织的,就可以明白分层组织的含义。从用户的角度来看,下面的查询字符串是很难理解的:
http://www.someblogsite.com/username/?y=2005&;m=01&;d=31
上面的查询字符串返回2005年1月1日的博客项,这并不容易确定。我们可以修改代码,使其参数更有意义,如下:
http://www.someblogsite.com/username/?year=2005&;month=01&;day=31
无论查询字符串的参数如何表示,一般用户都很难理解它。最好用富有层次感的表示方式编写查询字符串,如下:
http://www.someblogsite.com/username/2005/January/31
对于站点的一般访问者,上面的URL不是很难理解。例如,如果用户删除了日期,就会得到1月的所有记录。
即使没有自然的层次结构或干脆没有参数,只要URL有一个有意义的名称,而不是使用查询参数,用户还是较容易理解它们的。
1.3.2ASP.
NETv1.1的窍门
程序 在ASP.NETv1.x中执行URL重写功能的一个很好的资源是ScottMitchell撰写的MSDN文章“URLRewritinginASP.NET”,它位于msdn.microsoft.com/lib
rary/default.asp?url=/library/en-us/dnaspp/html/urlrewriting.asp。在这篇文章中,Scott解释了如何通过HTTP模块和HTTP处理程序执行URL重写功能,并说明了它们的使用场合。他还建立了一个可重用的URL重写引擎,通过配置文件使用正则表达式。
1.3.3ASP.NETv2.0的替代品
在ASP.NETv2.0中,是通过urlMappings配置元素支持重写URL功能的。给
web.config添加一个新项,来映射URL,如下所示:
AspDotNet Articles> mappedUrl="~/Articles.aspx?cat=1&;id=16"/>
用户看到的是url特性,而mappedUrl特性描述了实际请求的页面。在上面的urlMappings元素中,假定有一个文章页面根据类别和文章标识符动态返回文章。于是,url特性会显示首选的用户界面,但mappedUrl特性会显示实际的页面和请求的参数。
1.3.4实现URL映射功能
以前笔者编写过一个示例应用程序,来说明如何使用这个功能。这是文章的一个变体,介绍了上述概念,但它是根据年份和月份来解释的。例如,文章应用程序允许选择年份,再选择月份。每个页面上都显示了可读的URL,我们可以利用该URL,简单地修改页面地址,来导航应用程序。程序清单1-6显示了文章应用程序的初始页面。
程序清单1-6使用可读的URL标识年份的主页:Default.aspx
<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="Default.aspx.cs"
Inherits="_Default"%>
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<HTMLXMLNS="HTTP: xhtml? 1999 www.w3.org>
.NETArticleArchive