ASP.NET MVC 路由(五)

前言

前面的篇幅讲解了MVC中的路由系统,只是大概的一个实现流程,让大家更清晰路由系统在MVC中所做的以及所在的位置,通过模糊的概念描述、思维导图没法让您看到路由的实际运用,特此篇幅来说明一下简单的示例。

路由的命名空间的定义

对于路由当中url规则、默认值、url参数约束这些的定义网上都有,本篇讲一下路由中命名空间的定义。

大家都知道路由的作用,让请求匹配到合理的控制器名称,并且交由控制器工厂来生成控制器来执行请求。然而在项目中难免会命名出相同名称的控制器,我们来模拟一下会发现什么情况。

环境配置

在MVC项目中Controllers文件上右击->添加->控制器,命名为HomeController,并且选择空模板。然后就不用管这个控制器了,什么都不要做了,在此类型所在的命名空间之外添加以下代码:

 namespace AAAAA
{
public class HomeController : Controller
{
public ActionResult Index()
{
this.ViewBag.Name = this.GetType().FullName;
return View();
}
}
}
namespace BBBBB
{
public class HomeController : Controller
{
public ActionResult Index()
{
this.ViewBag.Name = this.GetType().FullName;
return View();
}
}
}

这个时候就是模拟的项目中由于时间的推移引用越来越多的程序集以及各种项目,所可能带来的重复命名,此时Global.asax文件中的默认路由定义:

 routes.MapRoute(
"Default", // 路由名称
"{controller}/{action}/{id}", // 带有参数的 URL
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 参数默认值

我们也不用管,直接开始调试,则会看到以下这样的错误,如图:

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

 routes.MapRoute(
"",
"{controller}/{action}",
new { controller = "Home", action = "Index" },
null,
new string[] { "AAAAA" }
);

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

 <h2>@ViewBag.Name</h2>

此时我们再执行MVC项目后,如图:

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

 routes.MapRoute(
"",
"{controller}/{action}",
new { controller = "Home", action = "Index" },
null,
new string[] { "AAAAA","BBBBB" }
);

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

如果想只在指定的命名空间下搜索的必须是这样定义:

 Route route= routes.MapRoute(
"",
"{controller}/{action}",
new { controller = "Home", action = "Index" },
null,
new string[] { "AAAAA" }
);
route.DataTokens["UseNamespaceFallback"] = false;

这里的MapRoute()方法会返回一个Route对象,前面我们也说过Route对象的,只不过在注册路由的时候我们完全没有必要获取Route对象的引用,在这里我们需要获取到它,并且要把DataTokens属性集中的UseNamespaceFallback键所对应的值设置为false。这个值将会被传递到控制器工厂中,后续篇幅会讲到。

这样的结果是如果没有搜索到指定的控制器系统也会停止搜索。

作者:金源

出处:http://www.cnblogs.com/jin-yuan/

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面

ASP.NET MVC 路由(五)的更多相关文章

  1. ASP.NET MVC路由(5)

    ASP.NET MVC路由(五) 前言 前面的篇幅讲解了MVC中的路由系统,只是大概的一个实现流程,让大家更清晰路由系统在MVC中所做的以及所在的位置,通过模糊的概念描述.思维导图没法让您看到路由的实 ...

  2. (转)ASP.NET MVC 第五个预览版和表单提交场景

    转自:http://ourlife.blog.51cto.com/708821/296171 上个星期四,ASP.NET MVC开发团队发布了ASP.NET MVC框架的“第五个预览版”.你可以在这里 ...

  3. ASP.NET MVC 视图(五)

    ASP.NET MVC 视图(五) 前言 上篇讲解了视图中的分段概念.和分部视图的使用,本篇将会对Razor的基础语法简洁的说明一下,前面的很多篇幅中都有涉及到视图的调用,其中用了很多视图辅助器,也就 ...

  4. ASP.NET MVC 路由(一)

    ASP.NET MVC路由(一) 前言 从这一章开始,我们即将进入MVC的世界,在学习MVC的过程中在网上搜索了一下,资料还是蛮多的,只不过对于我这样的初学者来看还是有点难度,自己就想看到有一篇引导性 ...

  5. ASP.NET MVC 路由(二)

     ASP.NET MVC路由(二) 前言 在上一篇中,提及了Route.RouteCollection对象的一些信息,以及它们的结构所对应的关系.按照处理流程走下来还有遗留的疑问没有解决这个篇幅就来讲 ...

  6. ASP.NET MVC 路由(三)

    ASP.NET MVC路由(三) 前言 通过前两篇的学习会对路由系统会有一个初步的了解,并且对路由系统中的Url规则有个简单的了解,在大家的脑海中也有个印象了,那么路由系统在ASP.NETMVC中所处 ...

  7. ASP.NET MVC 路由(四)

    ASP.NET MVC路由(四) 前言 在前面的篇幅中我们讲解路由系统在MVC中的运行过程以及粗略的原理,想必看过前面篇幅的朋友应该对路由有个概念性的了解了,本篇来讲解区域,在读完本篇后不会肯定的让你 ...

  8. ASP.NET MVC 过滤器(五)

    ASP.NET MVC 过滤器(五) 前言 上篇对了行为过滤器的使用做了讲解,如果在控制器行为的执行中遇到了异常怎么办呢?没关系,还好框架给我们提供了异常过滤器,在本篇中将会对异常过滤器的使用做一个大 ...

  9. Asp.Net MVC 路由 - Asp.Net 编程 - 张子阳

    http://cache.baiducontent.com/c?m=9d78d513d98316fa03acd2294d01d6165909c7256b96c4523f8a9c12d522195646 ...

随机推荐

  1. VS Code 配置Python

    1. 安装VS Code的Python插件,选择安装次数最多的那个 2. 点击用户设置菜单,在settings.json中添加 "python.pythonPath": " ...

  2. prototype 和__proto__

    //Animal构造函数 function Animal(name){ this.name = name; } //Animal原型对象 Animal.prototype = { id:"A ...

  3. QT5之三大重要窗体

    当创建项目时,会发现编辑器提供三个基类,分别为:QMainWindow.QWidget.QDialog,三个基类的区别说明如下.1.QMainWindowQMainWindow类提供一个有菜单条.锚接 ...

  4. Gulp常用前端流程自动化配置

    前言 近期的项目全部由Grunt + LESS 转向改用Gulp + SASS 进行前端开发,也就奔着Gulp那比较好用的自定义函数而来的. 一.package.json文件配置如下: { " ...

  5. Web API返回JSON数据

    对Web API新手来说,不要忽略了ApiController 在web API中,方法的返回值如果是实体的话实际上是自动返回JSON数据的例如: 他的返回值就是这样的: { "Conten ...

  6. css的margin

    1.适合于没有设定width/height的普通block水平元素 2.只适用于水平方向尺寸 例子:一侧定宽的自适应布局 <html> <head> <meta name ...

  7. 【BZOJ3943】[Usaco2015 Feb]SuperBull 最小生成树

    [BZOJ3943][Usaco2015 Feb]SuperBull Description Bessie and her friends are playing hoofball in the an ...

  8. QGis、Gdal本地中文路径问题

    编译qgis完整项目后,由于Gdal库的原因,中文路径下通过添加矢量数据中数据库中是没有OGR的Oracle数据库功能的: 最开始打算通过重新编译gadl库从内部支持中文的(有成功的麻烦也请告诉我), ...

  9. Linux OpenVPN 服务端吊销(revoke)客户端证书

    (转自:https://www.xiaohui.com/dev/server/20070904-revoke-openvpn-client.htm) OpenVPN 服务器与 VPN 客户端之间的身份 ...

  10. 李洪强iOS经典面试题153- 补充

    李洪强iOS经典面试题153- 补充   补充 有空就来解决几个问题,已经懒癌晚期没救了... UML 统一建模语言(UML,UnifiedModelingLanguage)是面向对象软件的标准化建模 ...