路由 - ASP.NET MVC 4 系列

       软件开发人员常常对一些细小的细节问题倍加关注,由其在考虑源代码的质量和结构时更是如此。因此,当遇到大部分使用 ASP.NET 技术构建的站点,使用如下的 URL 地址时,可能会有些奇怪:

http://example.com/albums/list.aspx?catid=17173&genreid=33723&page=3

       既然我们对代码倍加重视,为什么不能同样的重视 URL 呢?虽然它看上去并不是那么重要,但它却是一种合法且广泛使用的 Web 用户接口!

理解 URL(Uniform Resource Locator)

       可用性专家力劝开发人员重视 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 框架中的路由主要有两种用途:

  1. 匹配传入的请求,并把这些请求映射到控制器操作。
  2. 构造传出的 URL,用来响应控制器中的操作。

       很多开发人员喜欢把路由与 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"

      

 

时间: 2024-08-28 10:08:02

路由 - ASP.NET MVC 4 系列的相关文章

ASP.NET MVC学习系列(二)-WebAPI请求

继续接着上文 ASP.NET MVC学习系列(一)-WebAPI初探 来看看对于一般前台页面发起的get和post请求,我们在Web API中要如何来处理. 这里我使用Jquery 来发起异步请求实现数据调用. 继续使用上一文章中的示例,添加一个index.html页面,添加对jquery的引用. 一.无参数Get请求 一般的get请求我们可以使用jquery提供的$.get() 或者$.ajax({type:"get"}) 来实现: 请求的后台Action方法仍为上篇文章中的GetU

ASP.NET MVC学习系列(二)-WebAPI请求(转)

转自:http://www.cnblogs.com/babycool/p/3922738.html 继续接着上文 ASP.NET MVC学习系列(一)-WebAPI初探 来看看对于一般前台页面发起的get和post请求,我们在Web API中要如何来处理. 这里我使用Jquery 来发起异步请求实现数据调用. 继续使用上一文章中的示例,添加一个index.html页面,添加对jquery的引用. 一.无参数Get请求 一般的get请求我们可以使用jquery提供的$.get() 或者$.ajax

ASP.NET MVC学习系列(一)-WebAPI初探

由于即将要接手的新项目计划用ASP.NET MVC3来开发,所以最近一段时间一直在看相关的书或文章.因为之前在大学里也曾学习过MVC2开发,也做过几个简单的MVC2的小型测试项目,不过在后来工作以后主要还是开发WebForm的项目,所以MVC的东西也就逐渐的淡忘了. 经过这一段时间的系统学习,真的觉得MVC3相比于之前的MVC2还有WebForm来说,确实有一种让人欲罢不能爽歪歪的感觉.特别是Razor语法.Linq表达式等的结合运用. 为了将学习过程中遇到的一些值得留意的问题和知识点进行一个很

控制器(Controller) – ASP.NET MVC 4 系列

       创建一个 ASP.NET MVC 4 Web Application 项目,将程序命名为 MvcMusicStore,如下图: 控制器        MVC 模式中,控制器主要负责响应用户的输入.并且在响应时修改模型.提供相关视图的输出数据.        请求的 URL 首先被路由机制截获,以决定实例化哪一个控制器,调用哪个操作方法,并未该方法提供需要的参数.然后,控制器的方法决定使用哪个视图,并对该视图进行渲染.        添加一个新的 Empty 控制器,命名为 Stor

扩展 ASP.NET MVC 模型扩展 – ASP.NET MVC 4 系列

       大部分人不能将核心运行时(System.Web 中的类)和 ASP.NET Web Forms 应用程序平台(System.Web.UI 中的类)区分开来.        ASP.NET 开发团队在简单的核心运行时抽象之上创建了复杂的 Web Form 抽象和 ASP.NET MVC.正因为 ASP.NET MVC 框架建立在公共抽象之上,所以 ASP.NET MVC 框架能实现的任何功能,任何人也都可以实现.ASP.NET MVC 框架本身也由若干层抽象组成,从而使得开发人员能够

ASP.NET Web API - ASP.NET MVC 4 系列

       Web API 项目是 Windows 通信接口(Windows Communication Foundation,WCF)团队及其用户激情下的产物,他们想与 HTTP 深度整合.WCF 进行 Web 服务编程的迭代是一个抽象事务,主要为了隐藏像传输细节一样的内容.Web API 试图彻底颠覆这一过程,去掉 WCF 中的大部分层,而允许开发人员直接访问 HTTP 编程模型的所有方面.        ASP.NET MVC 在接收表单数据生成 HTML 方面功能非常强大:ASP.NE

可编辑路由—Asp.NET MVC项目编译后,修改路由配置可动态加载

Asp.NET MVC 应用程序一旦完成部署到线上后,就不能够修改路由配置,只有重新编译应用程序,重新部署到程序集才能够完成,最近在学习过程中看到了一篇博客关于如何更改路由选项后,能够直接运行到已部署的应用程序中. 首先看看我在程序中,解决方案的结构选项,方便学习,,Route文件夹中放的是这次需要的类文件和接口,在控制器中我定义了一个HomeController 在里面定义了Index和Modify两个方法,也在Views文件夹中定义了相应的视图用于测试使用. 1,定义一个IRouteRegi

Ajax - ASP.NET MVC 4 系列

       ASP.NET MVC 框架中包含一组 Ajax 辅助方法,可以用来创建表单和指向控制器操作的链接,它们是异步的,且不用编写任何脚本代码来实现程序的异步性,但需要引入脚本文件 jquery.unobtrusive-ajax.js,MVC 4 应用程序默认在 _Layout 视图中包含这个脚本:               当然,也可以去除它,而在需要的页面上手动引入:        Ajax 的 ActionLink 方法        在 Razor 视图中,可通过 Ajax 属

Razor 视图引擎 – ASP.NET MVC 4 系列

       Razor 视图引擎是 ASP.NET MVC 3 开始扩展的内容,并且也是默认视图引擎.        Razor 通过理解标记的结构来实现代码和标记之间尽可能顺畅的转换.下面的例子演示了一个包含少量视图逻辑的简单 Razor 视图: @{ // this is a block of code. For demonstration purposes, // we'll create a "model" inline. var items = new string[] {