ASP.NET MVC的路由
好久没写博文了,感觉最近好像少了点动力。唉!这回就看看这个MVC的路由。
说这个路由机制其实不是MVC里面特有的,ASP.NET里面本身就有的,只不过在WebForm里面一般比较少用,而在MVC里就是把原本的路由扩展了。原本对不知道单纯在ASP.NET里使用路由的详细情况,但自从看了蒋金楠老师的几篇文章之后知晓了,不过这篇还是讲MVC的路由而已。
路由的定义是位于根目录下的全局文件Global.asax.cs。里面有个RegisterRoutes方法
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "System", action = "TestPage", id = UrlParameter.Optional } // Parameter defaults
);
}
这里有两部分,一部分是
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
这个是用于忽略路由的,按上面的情况,则是不对asd文件经行路由,可以直接去访问。
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "System", action = "TestPage", id = UrlParameter.Optional } // Parameter defaults
);
这个是定义路由的。根据上面的注释,可以看出第一个参数是定义了路由的名称;第二个则是URL的参数;第三个则是URL参数的默认值。除此外还可以对URL的参数进行某些约束,设置命名空间等。关于MapRoute的其他重载如下
public static Route MapRoute(this RouteCollection routes, string name, string url);
public static Route MapRoute(this RouteCollection routes, string name, string url, object defaults);
public static Route MapRoute(this RouteCollection routes, string name, string url, string[] namespaces);
public static Route MapRoute(this RouteCollection routes, string name, string url, object defaults, object constraints);
public static Route MapRoute(this RouteCollection routes, string name, string url, object defaults, string[] namespaces);
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 |
参数 |
备注 |
|
Controller=System Action=TestPage |
调用SystemController下的TestPage方法 |
|
|
Controller=Customer Action=Login |
调用CustomerController下的Login方法,id参数为空 |
|
|
Controller=Customer Action=Login Id=1 |
调用CustomerController下的Login方法,id参数为1 |
|
|
Controller=null Action=null |
默认调用SystemController下的TestPage方法 |
|
|
Controller=System Action=null |
访问SystemController,默认调用TestPage方法 |
在这里另外推荐一个好东西专门用于测试路由的好东西,RouteDebug,这个需要额外引用一个dll,叫RouteDebug.dll(可在网上找一下),然后在全局文件Global.asax.cs里面的Application_Start()方法里加多一行代码
RouteDebug.RouteDebugger.RewriteRoutesForTesting(RouteTable.Routes);
打开浏览器输入相应的URL,则会出现一下页面

从这个页面可以知道当前的URL跟那个路由匹配了,还有与当前路由列表中其他路由的匹配情况。除此之外,能获取到当前请求的URL,匹配的各个参数,还有各个路由在路由集合的顺序等等。
在这个例子中我还定义了另一个路由
routes.MapRoute(
"MyRoute1",
"Customer/{action}/{id}",
new { controller = "Customer", action = "Login", id = - });
从上面路由集合的顺序可以看出,这个路由的顺序要比默认路由{Controller}/{action}/{*id}有前。如果这个路由放在默认路由前面,则这个MyRoute1路由则起不了作用,可以用“~/Customer”测试。
ASP.NET MVC的路由的更多相关文章
- ASP.NET MVC 自定义路由中几个需要注意的小细节
本文主要记录在ASP.NET MVC自定义路由时,一个需要注意的参数设置小细节. 举例来说,就是在访问 http://localhost/Home/About/arg1/arg2/arg3 这样的自定 ...
- 理解ASP.NET MVC的路由系统
引言 路由,正如其名,是决定消息经由何处被传递到何处的过程.也正如网络设备路由器Router一样,ASP.NET MVC框架处理请求URL的方式,同样依赖于一张预定义的路由表.以该路由表为转发依据,请 ...
- 返璞归真 asp.net mvc (2) - 路由(System.Web.Routing)
原文:返璞归真 asp.net mvc (2) - 路由(System.Web.Routing) [索引页] [源码下载] 返璞归真 asp.net mvc (2) - 路由(System.Web.R ...
- asp.net mvc 特性路由(MapMvcAttributeRoutes)的应用
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u012835032/article/details/51160824asp.net mvc 特性路由 ...
- ASP.NET MVC API 路由生成规则
我们都知道调用ASP.NET MVC的某些API函数(诸如:Url.Action.RedirectToAction等)可以生成URL,ASP.NET MVC会根据调用API函数时传入的参数去匹配系统定 ...
- ASP.NET MVC 之 路由配置
主要操作在App_Start 目录下的 RouteConfig.cs 文件. 一.Url构造方式 1.命名参数规范+匿名对象 routes.MapRoute( name: "Default& ...
- asp.net mvc 伪静态路由配置
asp.net mvc实现伪静态路由必须按如下方式设置好,才能访问 .htm 或者.html页面 C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspne ...
- asp.net MVC URL路由入门指南
asp.net MVC 的URL路由是一个非常强大的功能,而且有个优点:强大单不复杂.然而,目前我在网上看到的相关资料,却都仅仅提供一些示例,仅通过这些示例,初学者基本上不可能明白为什么要这么配置,更 ...
- asp.net MVC 5 路由 Routing
ASP.NET MVC ,一个适用于WEB应用程序的经典模型 model-view-controller 模式.相对于web forms一个单一的整块,asp.net mvc是由连接在一起的各种代码层 ...
随机推荐
- denyhost防止SSH暴力破解
参考: http://blog.sina.com.cn/s/blog_593af2a70102vjnf.html denyhost 官网: http://denyhosts.sourceforge.n ...
- php连接oracle数据库的方法
1.在php.ini中打开extension=php_oci8扩展,重启服务. 2.将php/ext目录下的php_oci8.dll文件拷贝到system32目录下 3.安装 Oracle9i客户端精 ...
- WebApp开发之--"rem"单位(转)
随着web app的兴起,rem这是个低调的css单位,近一两年开始崭露头角,有许多朋友对于它的评价不一,有的在尝试使用,有的在使用过程中遇到坑就弃用了.但是我认为rem是用来做web app它绝对是 ...
- Flink 剖析
1.概述 在如今数据爆炸的时代,企业的数据量与日俱增,大数据产品层出不穷.今天给大家分享一款产品—— Apache Flink,目前,已是 Apache 顶级项目之一.那么,接下来,笔者为大家介绍Fl ...
- json date convert
function getDateTime(jsondate) { var date = new Date(parseInt(jsondate.replace("/Date(", & ...
- js 判断微信浏览器
上周接到个需求,需求是这样的:用户扫一扫二维码会产生一个链接,该链接会向后端发送个请求,返回一个 apk 的下载地址,用户点击下载按钮可以下载此 apk.然后就发生了问题,经过测试,发现用微信扫一扫打 ...
- 安装vim中文帮助vimcdoc
1. 下载: 下载页面:http://vimcdoc.sourceforge.net/ 选择“Latest platform independent tarball, including an Lin ...
- win8 IIS
IIS打开页面报500错误 aspnet_regiis.exe -i 报 “此操作系统版本不支持此选项” 决解方法: 控制面板 - 程序和功能 - 启动或关闭windows功能 - Internet ...
- IOS 开发之 Method Swizzling + Category
ios 分类中如果增加的方法与被扩展的类方法名重复,则原方法就没法被调用….看以下例子 例如: @interface ClassA : NSObject - (NSString *) myMethod ...
- apache服务器配置Net的实践
前置: 在xp系统中,打补丁之类或啥子操作引起或多或少的问题,最终导致iis不能使用: 不想装系统...忍着... 最近突发事件导致,需要摸一下apache服务器处理,好吧,那就搜索下吧..... 目 ...