ASP.NET MVC的路由

  好久没写博文了,感觉最近好像少了点动力。唉!这回就看看这个MVC的路由。

  说这个路由机制其实不是MVC里面特有的,ASP.NET里面本身就有的,只不过在WebForm里面一般比较少用,而在MVC里就是把原本的路由扩展了。原本对不知道单纯在ASP.NET里使用路由的详细情况,但自从看了蒋金楠老师的几篇文章之后知晓了,不过这篇还是讲MVC的路由而已。

  路由的定义是位于根目录下的全局文件Global.asax.cs。里面有个RegisterRoutes方法

 1         public static void RegisterRoutes(RouteCollection routes)
 2         {
 3             routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
 4 
 5             routes.MapRoute(
 6                 "Default", // Route name
 7                 "{controller}/{action}/{id}", // URL with parameters
 8                 new { controller = "System", action = "TestPage", id = UrlParameter.Optional } // Parameter defaults
 9             );
10         }

这里有两部分,一部分是

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

这个是用于忽略路由的,按上面的情况,则是不对asd文件经行路由,可以直接去访问。

1             routes.MapRoute(
2                 "Default", // Route name
3                 "{controller}/{action}/{id}", // URL with parameters
4                 new { controller = "System", action = "TestPage", id = UrlParameter.Optional } // Parameter defaults
5             );

 

这个是定义路由的。根据上面的注释,可以看出第一个参数是定义了路由的名称;第二个则是URL的参数;第三个则是URL参数的默认值。除此外还可以对URL的参数进行某些约束,设置命名空间等。关于MapRoute的其他重载如下

1 public static Route MapRoute(this RouteCollection routes, string name, string url);
2 public static Route MapRoute(this RouteCollection routes, string name, string url, object defaults);
3 public static Route MapRoute(this RouteCollection routes, string name, string url, string[] namespaces);
4 public static Route MapRoute(this RouteCollection routes, string name, string url, object defaults, object constraints);
5 public static Route MapRoute(this RouteCollection routes, string name, string url, object defaults, string[] namespaces);
6 public static Route MapRoute(this RouteCollection routes, string name, string url, object defaults, object constraints, string[] namespaces);

 

另外,各个路由的名称一定要唯一的,不能重复。

  URL参数中{Controller}和{action}是两个比较特殊的占位符,分别代表着请求对应的控制器和行为方法。在后面跟着的参数则是传到行为方法里面的参数,在这里声明的是{id},方法的参数名一定是id才能获取到参数,否则传到方法里面的参数值是null。如果在参数名前面带一个星号(*),如{*id},这样就会匹配URL后面所有的剩余的参数。

  对于上面这个路由的定义,接收到以下请求时,参数的匹配如下

请求URL

参数

备注

http://localhost:1345/System/TestPage

Controller=System Action=TestPage

调用SystemController下的TestPage方法

http://localhost:1345/Customer/Login

Controller=Customer Action=Login

调用CustomerController下的Login方法,id参数为空

http://localhost:1345/Customer/Login/1

Controller=Customer Action=Login Id=1

调用CustomerController下的Login方法,id参数为1

http://localhost:1345

Controller=null Action=null

默认调用SystemController下的TestPage方法

http://localhost:1345/System

Controller=System Action=null

访问SystemController,默认调用TestPage方法

  在这里另外推荐一个好东西专门用于测试路由的好东西,RouteDebug,这个需要额外引用一个dll,叫RouteDebug.dll(可在网上找一下),然后在全局文件Global.asax.cs里面的Application_Start()方法里加多一行代码

RouteDebug.RouteDebugger.RewriteRoutesForTesting(RouteTable.Routes);

 

打开浏览器输入相应的URL,则会出现一下页面

  从这个页面可以知道当前的URL跟那个路由匹配了,还有与当前路由列表中其他路由的匹配情况。除此之外,能获取到当前请求的URL,匹配的各个参数,还有各个路由在路由集合的顺序等等。

在这个例子中我还定义了另一个路由

1             routes.MapRoute(
2                 "MyRoute1",
3                 "Customer/{action}/{id}",
4                 new { controller = "Customer", action = "Login", id = -1 });

 

  从上面路由集合的顺序可以看出,这个路由的顺序要比默认路由{Controller}/{action}/{*id}有前。如果这个路由放在默认路由前面,则这个MyRoute1路由则起不了作用,可以用“~/Customer”测试。

转载于:https://www.cnblogs.com/HopeGi/p/3168556.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/433403.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java情书_Java情书已写好,就差妹子了!

我是Java程序员我用我的方式表达对你的爱!我能抽象出整个世界...但是我却不能抽象出你...你肯定是一个单例,因为你是那样的独一无二...所以我的世界并不完整...我可以重载甚至覆盖这个世界里的任何一种方法...但是却不能覆盖对你的思念...也许命中注定了…

windows下手动配置ipv6地址

在XP,2003等早期版本中,ipv6地址在“网络连接”的属性配置里是无法手工配置的,只能使用netsh配置。配置方法如下:首先,安装IPV6协议,ipv6 install 第二步,查看当前使用的本地连接信息: 如上图&a…

java 幽灵引用_Java 幽灵引用的作用

原标题:Java 幽灵引用的作用来源:imzoer,blog.csdn.net/imzoer/article/details/8044900找实习的时候,面试大摩,就遇到了这个问题,当时真不该跟面试官交流这个内容的。垃圾收集过程中,对象的可触…

java assembly 打包_maven 使用assembly 进行打包的方法

1. pom 中添加assembly 插件要使用assembly 进项编译打包, 首先主要在pom 中的build中添加插件信息, 具体如图下所示:${project.artifactId}src/main/javasrc/main/resourcestrue**/*.xml**/*.properties${profile.dir}trueorg.apache.maven.…

rt5350 中断初始化

linux 下的中断初始化,实际就是对 irq_desc 这个结构体进行初始化,其中最关键莫过于 irq_flow_handler_t handle_irq 中断处理函数 struct irqaction *action 用户自己设置的处理函数链表,由hand…

VS2010安装异常中断后无法安装的解决方法(安装时发生严重错误)

最近,因为公司开发的需要,对开发环境进行全面的升级,在这其中也遇到了不少问题,在之后将陆续整理出来,以便以后查看。 之前开发环境:ArcGIS9.3,ArcEngine9.3,Oracle10g,A…

将5350 i2c clk设置为gpio 中断模式的方法

5350和我之前用的三星和全志的芯片在中断这块有点差别,三星和全志的都是有专门的外部中断管脚,并且每个中断管脚对应一个中断号,对管脚寄存器的配置即irq_desc里chip变量,都是bsp里自带的,我们只需要用request_irq来注…

代码大全 MSIL语言程序设计

.NET平台的编译器会将高级语言(C#,VB.NET,F#)编译成MSIL(微软中间语言)格式。熟悉MSIL语言,可以读懂一些加密程序混淆过的算法,这些算法几乎不能还原成高级语言,但是可以还原成MSIL语言。也可以知道一些高级语言之外的关于CLR的特性&#xff…

以太网交换机

以太网交换机是基于以太网传输数据的交换机,以太网采用共享总线型传输媒体方式的局域网。以太网交换机的结构是每个端口都直接与主机相连,并且一般都工作在全双工方式。交换机能同时连通许多对端口,使每一对相互通信的主机都能像独占通信媒体…

待办事项桌面插件_让浏览器重获整洁——标签页管理插件:OneTabOneTab PlusToby...

1 什么是标签页管理插件chrome浏览器虽然为用户提供了一个非常方便的打开新标签页的方法,但是随着用户浏览网页的时间增长,用户在一个chrome窗口中打开的标签页会越来越多,当这些标签页过多的时候,用户在标签页之间进行切换就会变…

关机时无人照管更新正在运行_了解iOS13.1后,在决定更新

苹果提前发布了首个重要更新的iOS 13.1,补充了多个 iOS 13 首发时缺失的重要新功能,可以说 iOS 13.1 才是【真正】的 iOS 13 系统。苹果发布iOS13.1,都更新了哪些内容?iOS13.1修复问题和改进问题:?信息中拟我表情可能无法正确跟踪…

山西计算机网络技术专升本分数线_2020山西成考专升本招生补录第一批公告!附补录院校专业缺额表!...

☞回复【成绩】查询2020年成人高考成绩☞回复【录取】查询20成考录取结果☞回复【补录】查询最新院校缺额信息☞加入学历备考交流群 550985358 专升本第一阶段补录通知与院校缺额信息 达线未被录取?还有机会2020山西成考专升本招生征集志愿第一阶段公告发布12月9日1…

网页编码就是那点事

编码一直是让新手头疼的问题,特别是 GBK、GB2312、UTF-8 这三个比较常见的网页编码的区别,更是让许多新手晕头转向,怎么解释也解释不清楚。但是编码又是那么重要,特别在网页这一块。如果你打出来的不是乱码,而网页中出…

Linux C 中字符串化操作符#

1 #include <stdio.h>2 3 #define dprint( expr ) printf( "%s %d \n", #expr , expr)4 5 int main(void)6 {7 int x 100;8 int y 2;9 10 dprint(x/y); 11 dprint( xy ); 12 dprint( xy2 ); 13 return 0; 14 } 打印信息&…

U-BOOT之一:BootLoader 的概念与功能

U-BOOT之一&#xff1a;BootLoader 的概念与功能 ——转自《U-BOOT移植S3C2440完全手册》 1.1嵌入式Linux 软件结构与分布 一般情况下嵌入式Linux 系统中的软件主要分为以下几部分&#xff1a; 1) 引导加载程序&#xff1a;其中包括内部ROM 中的固化启动代码和BootLoader 两部分…

java写七彩文字_【PS精选案例教程】创建一个漂亮的七彩文字

原标题&#xff1a;【PS精选案例教程】创建一个漂亮的七彩文字效果图&#xff1a;步骤1. 新建一个文档(大小随意)步骤2. 滤镜→渲染→云彩步骤3. 可以按CtrlAltF增加效果步骤4. CtrlJ复制一层步骤5.设置前景色步骤6. 用径向渐变从中间往外拉一个渐变步骤7. 设置“图层1”混合模…

容斥原理的二进制实现模版

最近学习容斥原理&#xff0c;实现容斥原理大致有三种方法&#xff1a;dfs&#xff0c;队列数组&#xff0c;二进制。 今天主要讲下二进制实现容斥原理&#xff1a; 有一个集合{A1……An}&#xff0c;求集合的子集&#xff1f;很显然答案为 也就是2^n个&#xff0c;也就是每一个…

测试鼠标双击_鼠标环境可靠性测试是什么

鼠标和电脑是的组合&#xff0c;购买电脑时一般商家会送给用户一个配套的鼠标&#xff0c;鼠标和电脑一样&#xff0c;对环境的要求较高&#xff0c;极少部分的鼠标由于短路或者是环境温度过高的问题会导致鼠标出现自燃的现象&#xff0c;如果用户此时正在使用电脑编辑文件&…

virtualbox主机网络管理 未能创建_如何在 VirtualBox 中增加现有虚拟机的磁盘大小 | Linux 中国...

导读&#xff1a;你可以在 VirtualBox 中扩大虚拟硬盘&#xff0c;即使在创建之后也可以。                   本文字数&#xff1a;1434&#xff0c;阅读时长大约&#xff1a;2分钟https://linux.cn/article-12869-1.html作者&#xff1a;Dimitrios Savvopoulos译者…

usb长包数据结束判断_如何判断南桥好坏 判断南桥好坏方法介绍【详解】

南桥是电脑里重要的零部件&#xff0c;南桥芯片主要是负责I/O接口等一些外设接口的控制、IDE设备的控制及附加功能等等。那么南桥发生故障&#xff0c; 怎么判断南桥好坏 呢?一、通过测PCI槽、AGP槽对地打阻值可判定南北桥有无损坏1、PCI槽中所有的AD复合线对地打阻值都为300&…