标签:
软件开发人员常常对一些细小的细节问题倍加关注,由其在考虑源代码的质量和结构时更是如此。因此,当遇到大部分使用 ASP.NET 技术构建的站点,使用如下的 URL 地址时,可能会有些奇怪:
http://example.com/albums/list.aspx?catid=17173&genreid=33723&page=3
既然我们对代码倍加重视,为什么不能同样的重视 URL 呢?虽然它看上去并不是那么重要,但它却是一种合法且广泛使用的 Web 用户接口!
可用性专家力劝开发人员重视 URL,并指出高质量的 URL 应该满足以下几点要求:便于记忆和拼写、简短、便于输入、可以反映出站点结构、“可破解的”,用户可以移除 URL 的末尾,进而到达更高层次的信息体系结构、持久,不能改变。
按照传统,在很多 Web 框架中(如 ASP、JSP、PHP、ASP.NET 等),URL 代表的是磁盘上的物理文件,例如上面的 URL 我们可以确定站点的目录结构中有一个 albums 文件夹,且还包含一个 List.aspx 文件。URL 和文件系统的这种对应关系,并不适用于大部分基于 MVC 的 Web 框架,这类框架应用不同的方法把 URL 映射到某个类的方法调用,而不是磁盘上的某个物理文件。
URL 是统一资源定位符的首字母所写,资源是一种抽象概念,既可以指一个文件,也可以指方法调用的结果或服务器上的一些其他内容。
URI 代表统一资源标识符,从技术角度看,所有 URL 都是 URI。W3C 认为 URL是一个非正式的概念,它通过表示自身的主要访问机制来标识资源。而有专家提出另一种看法:URI 是某资源的标识符,URL 则为获取该资源提供了具体的信息。
ASP.NET MVC 框架中的路由主要有两种用途:
很多开发人员喜欢把路由与 URL 重写进行对比。因为这两种方法都可用于分离传入 URL 和结束处理请求。此外,它们都可以为搜索引擎优化(Search Engine Optimization,SEO)构建“漂亮的”URL。然而,它们也有很大的区别:URL 重写关注的是将一个 URL 映射到另一个 URL,例如常把旧的 URL 映射到新的 URL,与之相比,路由关注的则是如何将 URL 映射到资源。
每个 ASP.NET MVC 程序都至少需要一个路由来定义自己处理请求的方式,但通常,总是会有一个或多个路由,非常复杂的程序可能会有数十个甚至更多。
路由的定义是从 URL 模式开始的,因为它指定了与路由相匹配的模式。路由可以指定它的 URL 及其默认值,可以约束 URL 各个部分,提供关于路由如何、何时与传入的请求 URL 相匹配的严格控制。
现在清除 RegisterRoutes 方法中所有的代码,然后添加一个非常简单的路由,添加后如下:
public static void RegisterRoutes(RouteCollection routes)
{
routes.MapRoute("simple", "{first}/{second}/{third}");
}
MapRoute 方法的最简单形式是采用路由名称和路由的 URL 模式。下表展示了在上面代码中定义的路由如何把指定的 URL 解析成一个存储在 RouteValueDictionary 实例中的键/值对,从而可以帮助理解,路由如何把 URL 分解成稍后在请求管道中使用的重要信息片段:
URL |
URL 参数值 |
/albums/display/123 | first="albums" second="display" third="123" |
/foo/bar/baz | first="foo" second="bar" third="baz" |
/a.b/c-d/e-f | first="a.b" second="c-d" third="e-f" |
标签:
原文地址:http://www.cnblogs.com/SkySoot/p/5652886.html