MVC路由器原理

目录

     1、什么是路由

     2、路由的注册

     3、URL的模式匹配

     4、由URL到控制器


 


     1、什么是路由

 举例什么是路由?假如你在上大学的时候,睡觉起晚了,醒来后发现宿舍同学都走光了,你想到上午还有课,但是不记得去哪个教室去上了,这时候你会查下课程表,然后就知道去哪个教室上课了。这个课程表就是你的路由。

      网络中的路由器,路由器主要是在网络中做数据转发,连接Internet各个局域网和广域网,让他们互通,当我们打开一个浏览器访问网页的时候,请求的数据包要到达一个远程的服务器要经过路由器的层层转发。

      在ASP.NET MVC中,路由有相似的作用,路由就是将输入的网页地址和控制器以及控制器的动作联系起来。

     2、路由的注册

RegisterRoutes方法就是注册路由的方法。

方法参数 RouteCollection是一个集合对象,这个集合对象用来保存多项路由数据,一项路由数据就是某种形式的URL路径、和控制器以及Action的关系。根据这个关系,MVC才能执行到控制器部分。

 

那么怎么才能添加这种路由数据呢?

就是调用 routes.MapRoute方法。

 

第一个参数是 路由名称。

第二个参数是用参数表示的URL。

第三个参数是默认值,是匿名类型。

 

第一个参数路由名称,类似于字典中的key

第二个是用占位符表示的URL,如这样的地址

     

   News就是 {controller},Detail就是{action},1就是{id}

 

 

3、URL的模式匹配

  学生有两个问题:

  1. URL中的参数字符串是可以随便写吗,还是有什么限制?
  2. 第三个参数里面的属性名和URL的参数字符串有什么关系吗?

 

首先第二个参数URL占位符的字符串是可以随便定义的,比如下面

 

但是在MVC中,我们用的URL还是这种形式

那么我们可以改里面的字符串值吗,比如讲controller改为control,把action改为actioned,我们可以直接的告诉大家,这是不可以的。

MVC框架中会从字典中读取键值名是controll的数据,比如这里的值是Home,然后MVC得到需要执行的控制器是HomeController

当然,同样是从字典中读取键值名是action的数据,比如这里的值是Index,然后MVC得到需要执行的action是Index方法

如果这两个字符串写错的话,代码就执行不到相应的控制器和里面的Action了,所以我们一定注意,写成 {controller}/{action}/{id}是一种约定。

关于这个过程,我们会在后面剖析MVC的源码会有更深刻的理解。

 

 

4、由URL到控制器

我们知道,通过前面的路由注册代码,会最终形成一个路由的集合数据,我们可以把它简单的看成一个路由表。

那么通过这个路由表,程序是怎么从URL进入到控制器(controller)和动作(action)的呢?

我们通过一个流程来看一下。

请求到达MVC程序后,首先会经过 UrlRoutingModule,他可以过滤每一个请求,他会根据请求的URL从路由表中查找与URL匹配的路由,然后从匹配的路由中得到一个名称MvcHandler的HttpHandler。

HttpHandler的作用就不用多说了,她就是一个处理程序,ASP.NET页面实际也是一个处理程序。

得到了MvcHandler这个处理程序,就执行他的ProcessRequest()方法,在这个方法内部,找到controller,然后继续往下执行。

 

 

 

说道这里,大家可能有个疑问:某项路由数据是怎么联系上一个HttpHandler呢,我们通过一段MVC的源代码来看一下。

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值