Routing

Routing翻译过来是"路由选择", 负责ASP.NET MVC的第一个工作:识别URL,将一个Url请求"路由"给Controller。

来了一个Url请求, 从中找到Controller和Action的值, 将请求传递给Controller处理。
Controller获取Model数据对象,,并且将Model传递给View,最后View负责呈现页面。
而Routing的作用就是负责分析Url, 从Url中识别参数。

  • Routing的作用

首页地址是: localhost/home/index
我们发现访问上面的地址,最后会传递给 HomeController中名为index的action(即HomeController类中的index方法)。
当然服务器端不会自己去实现这个功能,  关键点就是在Global.asax.cs文件中的下列代码:

    public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            routes.MapRoute
            (
              "Default",                       // Route name
              "{controller}/{action}/{id}",              // URL with parameters
              new { controller = "Home", action = "Index", id = "" } // Parameter defaults
            );
        }
    protected void Application_Start()
        {
            RegisterRoutes(RouteTable.Routes);
        }

回来看我们的Url: localhost/home/index
localhost是域名,所以首先要去掉域名部分: home/index
对应了上面代码中的这种URL结构: {controller}/{action}/{id}
因为我们建立了这种Url结构的识别规则,所以能够识别出 Controller是home,action是index,id没有则为默认值""。
这就是Routing的主要作用:
1.从Url中识别出数据。比如controller,action和各种参数。
如果跟踪程序,接下来我们会跳转到HomeController中的Index()方法。
2.根据识别出来的数据,将请求传递给Controller和Action。

  • Routing的使用

使用Routing为ASP.NET MVC程序添加路由规则。
使用MapRoute()方法,本质也是通过创建Route类的实例,为RouteCollection集合添加成员。
这是最简单的为ASP.NET MVC添加识别规则的方法。此方法有如下重载:

MapRoute( string name, string url);
MapRoute( string name, string url, object defaults);

name参数:
规则名称,可以随意起名。不可以重名,否则会发生错误:
路由集合中已经存在名为“Default”的路由。路由名必须是唯一的。
url参数:
url获取数据的规则,这里不是正则表达式,将要识别的参数括起来即可,比如: {controller}/{action}
最少只需要传递name和url参数就可以建立一条Routing(路由)规则。比如实例中的规则完全可以改为:

routes.MapRoute(
    "Default",
    "{controller}/{action}");

defaults参数:
url参数的默认值。如果一个url只有controller: localhost/home/
而且我们只建立了一条url获取数据规则: {controller}/{action}
那么这时就会为action参数设置defaults参数中规定的默认值。

defaults参数是Object类型,所以可以传递一个匿名类型来初始化默认值:

new { controller = "Home", action = "Index" }



原文地址:https://www.cnblogs.com/chrisghb8812/p/6086507.html