首页 > 代码库 > MVC中的网址路由

MVC中的网址路由

 

 什么是网址路由?

 理论上的东西,小编也就不在多说了,只简单的介绍下,自己的认识。

 所谓的网址路由,就是一个规则。通过这个规则来匹配。就好比我们经常用到的正则表达式一样。


 默认的网址路由

 打开项目中的RouteConfig.cs的话,会看到如下代码

<span style="font-family:SimSun;font-size:18px;"><span style="font-family:SimSun;font-size:18px;">public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");  

            routes.MapRoute(
                name: "Default",              //路由名称
                url: "{controller}/{action}/{id}",    //参数匹配表
                //默认参数
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }</span></span>

 所有的ASP.NET MVC Routing都会在此定义。其中Routable.Routes是一个公开的静态对象,用于存储所有的Routing的规则集

 

 路由分析

 看完了上面默认的路由信息,下面来解读一下。

 1.每一个routes都代表了一个匹配的规则。

 2.IgnoreRoutes:定义了不需要匹配Routing处理的网址。

 3.resource:随便的一个名称,用来匹配网址中类似**.axd

 4.{*pathInfo}:*是我们经常见到的,代表全部,取到全部的意思。例如网址是/Test.axd/b/d/e,则{pathInfo}就带表b/d/e.但是如果不带*的话,就会只取到b变量的位置。

 5.MapRoute就是所谓的定义默认路由规则


 试一试

 看了上面的解释,来几个例子体验一下。

 例子一:网址是http://localhost/Test.axd/b/c/d/ehttp://localhost/Test.axd

 1.先比对Routes.IgnoreRoute。通过比对发现两者刚好合适,只不过后者中的{*patchInfo}为空而已。所以Http请求会由此网址服务。

 例子二:网址是Http://localhost/Home/Login?id=3

 1.从上至下开始比对,由于Routes.IgnoreRoute规则不通过,所以开始比对Routes.MapRoute的规则。

 2.通过比对{controller}/{action}/{id},我们可以得到controller=Home,action=Login,而?id=3就不在是此规则中的了。

 3.因为规则中都是以斜杠(/)来划分的,因此id=123比对不到但是可以读取到向的默认值UrlParamete.Optional。


 路由扩展
 如上述分析,我们知道了路由的规则后,因此也可以定制属于自己的规则。
 正则表达式
  
<span style="font-family:SimSun;font-size:18px;"> //路由约束
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");  

            routes.MapRoute(
                name: "Default",              //路由名称
                url: "{controller}/{action}/{id}",    //参数匹配表
                //默认参数
                defaults: new { controller = "Home", action = "Index", id =""},
                //添加限制条件,只允许Controller是以H开头
                constraints: new { controller="^H.*"}
                
  
            );
        }</span>
 以上在路由中通过Contraints添加为路由添加了限制条件,只允许通过以H开头的。
 网址路由还有其他的一些用途,有兴趣的,多多研究与分享。

 



 



 

 

 




MVC中的网址路由