ASP.NET MVC 的URL路由介绍
在这个教程中,向你介绍每个ASP.NET MVC一个重要的特点叫做URL路由。URL路由模块是负责映射从浏览器请求到特定的控制器动作。
在教程的第一部分,你将学习标准路由表如何映射到控制器的动作。在教程第二部分,你将学习如何修改默认路由表成为自定义路由。
使用默认路由表
当你创建一个新的ASP.NET MVC 应用程序,应用程序已经配置了默认的URL路由。URL路由在两个地方设置。
第一,URL路由配置在你的应用程序WEB配置文件中(Web.config文件)。文件中有四个有关路由的配置节:system.web.httpModules节,system.web.httpHandlers节,system.webserver.modules节,和system.webserver.handlers节。小心不要删除这些配置节,因为没有这些配置节路由将不在工作。
第二,更为重要的是,一个路由表在应用程序的Global.asax文件中创建。Global.asax文件是一个特别的文件,它包含了ASP.NET应用程序生命周期事件处理。当Application Start事件开始,路由被创建。
图1是一个ASP.NET MVC应用程序的默认Global.asax文件。
图 1 – Global.asax.cs
当一个ASP.NET MVC应用程序第一次运行时, Application_Start()方法被调用。这个方法,又调用RegisterRoutes()方法,RegisterRoutes()方法创建了路由表。
默认的路由本包含一个路由(命名Default).默认路由第一段URL映射到一个控制器名字,第二段URL映射到一个动作,第三段映射到一个参数叫Id.
想象你在浏览器地址栏输入以下URL:
/Home/Index/3
默认路由映射以下这些参数:
controller = Home
action = Index
id = 3
当你请求URL /Home/Index/3,以下代码会被执行:
HomeController.Index(3)
默认路由包括默认的三个参数。如果你提供一个控制器,那默认控制器参数值就是Home.如果你不提供一个动作,那默认动作参数的值就是Index.最后,如果你不提供一个id,那id参数默认是一个空字符串。
让我们看一些默认路由如何映射URL到控制器动作的示例。想象你在浏览器地址栏输入以下URL:
/Home
因为默认路由参数,这个URL会引起HomeController 类的Index()方法如图2被调用。
图2 – HomeController.cs
在图2中, HomeController类包含一个叫Index()的方法,它接受单个叫Id的参数。URL /Home 引起值为空字符串Id参数的 Index()被调用。
因为ASP.NET MVC框架调用控制器动作这个方式,the URL /Home 也匹配图3中的HomeController类 Index()方法。
图 3 – HomeController.cs (无参数的Index action)
图3中这个Index()方法不接受任何参数。URL /Home 将引起Index()的方法被调用。URL /Home/Index/3 也调用这个方法。(Id是被忽略的)
URL /Home 也匹配图4 中HomeController类Index()方法
图 4 – HomeController.cs (可空参数Index action)
图4中, Index()有一个整型方法. 因为参数是可空类型 (值能够为空), Index() 调用不能产生错误。
最后,图5中调用Index(),URL /Home引起一个异常从Id参数不是可空类型参数,如果你尝试调用Index()方法,你得来以一个错误页面:
图5 – HomeController.cs (Index action with)
URL /Home/Index/3, 另一方面, 图5中控制器 Index 动作是可以工作的。The 请求 /Home/Index/3 引发带一个值为3 Index() 方法被调用。
创建自定义路由
对于许多简碟的ASP.NET MVC 应用程序,默认路由表足够了。但是,你可能发现你有特别路由的需要。在这个案例中,你能创建一个自定义路由。
想象下,例如,你写一个BLOG应用程序,你可能要处理像这样的请求:
/Archive/12-25-2009
当一个用户发起这个请求,你要返回一个符合12/25/2009日期的BLOG。因此处理这样的请求,你需要创建一个自定义路由。
图6中Global.asax文件包含一个新的自定义路由,叫做Blog,处理像这样/Archive/entry date的请求。
图 6 – Global.asax (自定义路由)
路由表中你增加的路由顺序是很重要的。我们自定义Blog路由是增加在默认路由之前的。假如你搞反了,那默认路由将永远替代调用自定义路由。
自定义Blog路由匹配任何/Archive/开始请求,所以它匹配所有以下URLs:
/Archive/12-25-2009
/Archive/10-6-2004
/Archive/apple
这个自定义路由映射进来的请求到一个名叫Archive控制器同时调用Entry()方法,当Entry()方法被调用时,进入日期转成一个名叫entryDate参数。
在图7中 你能使用控制器与BLOG自定义路由。
图 7 – ArchiveController.cs
注意图7中的Entry()方法接受一个DateTime 类型的参数.ASP.NET MVC 框架是智能的,它能从URL的DateTime的值自动的转换为entry date。如果entry date从URL不能转换为DateTime,将引出错误。
总结
教程的目的提供你关于URL路由一段简短的介绍。第一,我们检验了你拿到一个新的ASP.NET MVC 应用程序的默认路由表。你学习到了默认路由表是如何把URL映到控制器动作的。
接下来,你学习了如何创建一个自定义路由表。你学习了如何在Global.asax文件中增加一个自定义路由表描述blog进入点。我们讨论如何映射请求blog进入点到一个名叫ArchiveController的控制器名叫Entry()的动作。
ASP.NET MVC 的URL路由介绍的更多相关文章
- 【转载】ASP.NET MVC重写URL制作伪静态网页,URL地址以.html结尾
在搜索引擎优化领域,静态网页对于SEO的优化有着很大的好处,因此很多人就想把自己的网站的一些网页做成伪静态.我们现在在网络上发现很多博客网站.论坛网站.CMS内容管理系统等都有使用伪静态这一种情况,伪 ...
- 【翻译】ASP.NET MVC 5属性路由(转)
转载链接:http://www.cnblogs.com/thestartdream/p/4246533.html 原文链接:http://blogs.msdn.com/b/webdev/archive ...
- MVC的URL路由规则
MVC的URL路由规则 Routing的作用:它首先是获取到View传过来的请求,并解析Url请求中Controller和Action以及数据,其次他将识别出来的数据传递给Controller的Act ...
- 为ASP.NET MVC应用添加自定义路由
这里,我们将学习如何给asp.net mvc应用添加自定义路由.用自定义路由来修改默认路由表. 对一些简单的asp.net mvc应用,默认的路由表就已经足够了.但是,当你需要创建特殊的路由时,就需要 ...
- Asp.Net MVC2.0 Url 路由入门---实例篇
本篇主要讲述Routing组件的作用,以及举几个实例来学习Asp.Net MVC2.0 Url路由技术. 接着上一篇开始讲,我们在Global.asax中注册一条路由后,我们的请求是怎么转到相应的Vi ...
- Asp.Net MVC2.0 Url 路由入门---实例篇 【转】
本篇主要讲述Routing组件的作用,以及举几个实例来学习Asp.Net MVC2.0 Url路由技术. 接着上一篇开始讲,我们在Global.asax中注册一条路由后,我们的请求是怎么转到相应的Vi ...
- (转)Asp.Net Mvc视图引擎Razor介绍
Asp.Net Mvc视图引擎Razor介绍 1.Razor介绍 程序园原创,转载请注明:http://www.kwstu.com/ArticleView/dabaomvc_2014082408205 ...
- ASP.NET MVC 学习之路由(URL Routing)
在ASP.NET MVC中,一个URL请求是由对应的一个Controller中的Action来处理的,由URL Routing来告诉MVC如何定位到正确的Controller和Action. 默认路由 ...
- asp.net mvc 通过修改路由规则来实现页面的URL多参数传递
[原文]http://blog.csdn.net/risingsun001/article/details/9068187 修改MVC3中的路由规则 在Global.asax.cs中,修改路由规则 原 ...
随机推荐
- Ibatis学习总结4--SQL Map XML 映射文件扩展
SQL Map XML 映射文件除了上文提到的属性还有一些其他重要的属性,下文将详细介绍这些属性. 缓存 Mapped Statement 结果集 通过在查询 statement 中指定 cacheM ...
- Fedora和Ubuntu下安装OpenGL开发环境配置
Fedora下OpenGl开发环境配置 开发OpenGL工程需要3个库文件和对应的头文件: libglut.so,libGLU.so,libGL.so, gl.h ,glu.h, glut.h 这些库 ...
- WDCP(WDlinux Control Panel) mysql/add_user.php、mysql/add_db.php Authentication Loss
目录 . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 http://www.wooyun.org/bugs/wooyun-2010-06 ...
- 五种开源协议的比较(BSD_Apache_GPL_LGPL_MIT)
现今存在的开源协议很多,而经过Open Source Initiative组织通过批准的开源协议目前有58种(http://www.opensource.org/licenses/alphabetic ...
- Java_观察者模式(Observable和Observer)
http://blog.csdn.net/tianjf0514/article/details/7475164/ 一.观察者模式介绍 在Java中通过Observable类和Observer接口实现了 ...
- Android 获取本地图片
MainActivity.java public class RegisterActivity extends AppCompatActivity { private ImageView iv; @O ...
- linux 搭建SVN服务器,为多个项目分别建立版本库并单独配置权限
1.安装svn服务 # yum install subversion 2.新建一个目录用于存储SVN所有文件 # mkdir /home/svn 3.在上面创建的文件夹中为项目 p ...
- ecshop后台"云提醒未激活 点击激活" 补丁删除方法
ecshop后台"云提醒未激活 点击激活" 补丁删除方法 ECSHOP教程/ ecshop教程网(www.ecshop119.com) 2015-01-15 ecshop后台提 ...
- DOM 元素 属性和方法
console.dir() namespaceURI: "http://www.w3.org/1999/xhtml" nextElementSibling: null nextSi ...
- 网页中Javascript获取时间
<script language="javascript"> <!-- function initArray() { for(i=0;i<initArray ...