ASP.NET MVC路由(5)
ASP.NET MVC路由(五)
前言
前面的篇幅讲解了MVC中的路由系统,只是大概的一个实现流程,让大家更清晰路由系统在MVC中所做的以及所在的位置,通过模糊的概念描述、思维导图没法让您看到路由的实际运用,特此篇幅来说明一下简单的示例。
路由的命名空间的定义
对于路由当中url规则、默认值、url参数约束这些的定义网上都有,本篇讲一下路由中命名空间的定义。
大家都知道路由的作用,让请求匹配到合理的控制器名称,并且交由控制器工厂来生成控制器来执行请求。然而在项目中难免会命名出相同名称的控制器,我们来模拟一下会发现什么情况。
环境配置
在MVC项目中Controllers文件上右击->添加->控制器,命名为HomeController,并且选择空模板。然后就不用管这个控制器了,什么都不要做了,在此类型所在的命名空间之外添加以下代码:

1 namespace AAAAA
2 {
3 public class HomeController : Controller
4 {
5 public ActionResult Index()
6 {
7 this.ViewBag.Name = this.GetType().FullName;
8 return View();
9 }
10 }
11 }
12 namespace BBBBB
13 {
14 public class HomeController : Controller
15 {
16 public ActionResult Index()
17 {
18 this.ViewBag.Name = this.GetType().FullName;
19 return View();
20 }
21 }
22 }

这个时候就是模拟的项目中由于时间的推移引用越来越多的程序集以及各种项目,所可能带来的重复命名,此时Global.asax文件中的默认路由定义:
1 routes.MapRoute(
2 "Default", // 路由名称
3 "{controller}/{action}/{id}", // 带有参数的 URL
4 new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 参数默认值
我们也不用管,直接开始调试,则会看到以下这样的错误,如图:

这种情况给谁都不愿意发生,如果我们此时只需要AAAAA命名空间下的Home控制器怎么办?好办,用路由来配置:

1 routes.MapRoute(
2 "",
3 "{controller}/{action}",
4 new { controller = "Home", action = "Index" },
5 null,
6 new string[] { "AAAAA" }
7 );

只需要在MapRoute方法中将所需的命名空间定义为数组传入即可,此时我们右键AAAAA命名空间下的HomeController类型中的Index()方法,点击添加视图->添加,完成后在项目的Views文件夹下的Home文件夹下有个Index.cshtml文件就是添加的视图文件了,打开并且添加如下代码:
1 <h2>@ViewBag.Name</h2>
此时我们再执行MVC项目后,如图:

此时有的朋友可能会问,如果想让系统现在AAAAA命名空间下搜寻如果没有则在BBBBB下搜寻控制器,然后让路由这样定义:

1 routes.MapRoute(
2 "",
3 "{controller}/{action}",
4 new { controller = "Home", action = "Index" },
5 null,
6 new string[] { "AAAAA","BBBBB" }
7 );

告诉朋友们这样是不行的,如果AAAAA下没有Home控制器还好,如果有系统还是会继续搜寻BBBBB命名空间下的所有类型,关于这里的具体实现将在后面的默认控制器工厂篇幅中讲到。
如果想只在指定的命名空间下搜索的必须是这样定义:

1 Route route= routes.MapRoute(
2 "",
3 "{controller}/{action}",
4 new { controller = "Home", action = "Index" },
5 null,
6 new string[] { "AAAAA" }
7 );
8 route.DataTokens["UseNamespaceFallback"] = false;

这里的MapRoute()方法会返回一个Route对象,前面我们也说过Route对象的,只不过在注册路由的时候我们完全没有必要获取Route对象的引用,在这里我们需要获取到它,并且要把DataTokens属性集中的UseNamespaceFallback键所对应的值设置为false。这个值将会被传递到控制器工厂中,后续篇幅会讲到。
这样的结果是如果没有搜索到指定的控制器系统也会停止搜索。
ASP.NET MVC路由(5)的更多相关文章
- ASP.NET MVC 路由(一)
ASP.NET MVC路由(一) 前言 从这一章开始,我们即将进入MVC的世界,在学习MVC的过程中在网上搜索了一下,资料还是蛮多的,只不过对于我这样的初学者来看还是有点难度,自己就想看到有一篇引导性 ...
- ASP.NET MVC 路由(二)
ASP.NET MVC路由(二) 前言 在上一篇中,提及了Route.RouteCollection对象的一些信息,以及它们的结构所对应的关系.按照处理流程走下来还有遗留的疑问没有解决这个篇幅就来讲 ...
- ASP.NET MVC 路由(三)
ASP.NET MVC路由(三) 前言 通过前两篇的学习会对路由系统会有一个初步的了解,并且对路由系统中的Url规则有个简单的了解,在大家的脑海中也有个印象了,那么路由系统在ASP.NETMVC中所处 ...
- ASP.NET MVC 路由(四)
ASP.NET MVC路由(四) 前言 在前面的篇幅中我们讲解路由系统在MVC中的运行过程以及粗略的原理,想必看过前面篇幅的朋友应该对路由有个概念性的了解了,本篇来讲解区域,在读完本篇后不会肯定的让你 ...
- ASP.NET MVC 路由(五)
ASP.NET MVC 路由(五) 前言 前面的篇幅讲解了MVC中的路由系统,只是大概的一个实现流程,让大家更清晰路由系统在MVC中所做的以及所在的位置,通过模糊的概念描述.思维导图没法让您看到路由的 ...
- Asp.Net MVC 路由 - Asp.Net 编程 - 张子阳
http://cache.baiducontent.com/c?m=9d78d513d98316fa03acd2294d01d6165909c7256b96c4523f8a9c12d522195646 ...
- AngularJS html5Mode与ASP.NET MVC路由
AngularJS html5Mode与ASP.NET MVC路由共存 前言 很久之前便听说AngularJS,非常酷,最近也比较火,我也在持续关注这个技术,只是没有认真投入学习.前不久公司找我们部门 ...
- Asp.Net MVC路由调试好帮手RouteDebugger
Asp.Net MVC路由调试好帮手RouteDebugger 1.获取方式 第一种方法: 在程序包控制台中执行命令 PM> Install-Package routedebugger 安装成功 ...
- ASP.NET MVC路由
ASP.NET MVC路由(四) 前言 在前面的篇幅中我们讲解路由系统在MVC中的运行过程以及粗略的原理,想必看过前面篇幅的朋友应该对路由有个概念性的了解了,本篇来讲解区域,在读完本篇后不会肯定的让你 ...
随机推荐
- Linux IPC(Inter-Process Communication,进程间通信)之管道学习
1.标准流管道 管道操作支持文件流模式,用来创建链接还有一个进程的管道,通过函数popen和pclose popen的详细介绍在本blog:Linux 多进程学习中有具体介绍 2.无名管道(PIPE) ...
- ASP.NET MVC:Razor 引入命名空间
原文:ASP.NET MVC:Razor 引入命名空间 页面中引用 c# @using MvcApplication83.Models @using MvcApplication83.Common 行 ...
- 4、Cocos2dx 3.0三,找一个小游戏开发Hello World 分析
尊重开发人员的劳动成果.转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27186557 Hello World 分析 打开新 ...
- 删RAC中间ASM和LISTENER
资源的正确方法
在我们的安装RAC什么时候.有时因各种错误加载错误ASM实例或LISTENER显示器,或增加CLUSTERWARE资源,但并没有真正的工作,例如: 如图所看到的,这里在2个节点分别创建过ASM1和AS ...
- 140724夏训.txt
1.同余定理 (a+b)%c==(a%c+b%c)%c (a*b)%c==[(a%c)*(b%c)]%c 由于有的数在int范围内,可是两个的乘积却超过了int范围,这样 ...
- 小程序大智慧,sqlserver 注释提取工具
原文:小程序大智慧,sqlserver 注释提取工具 开篇背景 我习惯在写表的创建脚本时将注释直接写在脚本里,比如 /*账套*/ CREATE TABLE [dbo].[AccountingBook] ...
- BIP Requests Are Failing With Error "OPP Error Oracle.apps.xdo.XDOException: Error Creating Lock Fil
In this Document Symptoms Cause _afrLoop=975833031487795&id=1512691.1&displayIndex=1&a ...
- 【地图API】为何您的坐标不准?如何纠偏?
原文:[地图API]为何您的坐标不准?如何纠偏? 摘要:各种坐标体系之间如何转换?到底有哪些坐标体系?什么是火星坐标?为什么我的坐标,在地图上显示会有偏移?本文详细解答以上问题.最后给出坐标拾取工具. ...
- [CLR via C#]4. 类型基础及类型、对象、栈和堆运行时的相互联系
原文:[CLR via C#]4. 类型基础及类型.对象.栈和堆运行时的相互联系 CLR要求所有类型最终都要从System.Object派生.也就是所,下面的两个定义是完全相同的, //隐式派生自Sy ...
- visual studio 辅助工具
resharper 这是一个收费软件 需要下载对应版本的注册机. 效果如图所示: 这里的using 很多没有用到,他会用灰色标记,你都可以统统去掉. 声明一个类 ,要求 首字母大写,如果你小写了,他 ...