ASP.NET MVC-轻松理解Routing(路由)

引言

  听到路由两字,想必首先想到的会是计算机网络中的路由,通过分组转发来将不同的数据包发送到对应的目的地址。其核心是路由表,表中记录了如何到达各目的地。

  ASP.NET MVC(下文都用MVC来特指ASP.NET MVC)中的Routing同样的也是完成这件事。用户提交请求后,系统根据路由表将请求送至相应的Controller中,然后为用户请求做出响应。

概念

  在Web应用中,我们都会通过URL(俗称网址)来发送我们对页面的请求,打开浏览器,输入我们将要访问网站的网址,然后等待浏览器加载我们期待的页面。

  • 传统的Web Form开发,URL映射到的是一个具体的处理程序,磁盘上的物理文件,如一个aspx文件。

  • MVC中多数情况下是将URL映射到Controller和Controller下的Action。

  一个仓库,传统的方式是用户直接拥有货物的地址,知道货物的具体位置,哪一个货架,哪一行,哪一列。而MVC则是用户需要告诉前台的仓库保管员,由仓库保管员找到用户需要的货物并交给用户。

过程

  在学习路由时,我觉得我们应该清楚MVC是如何处理请求并响应的。控制器中类的每个公共方法被称为Action方法。ASP.NET路由系统内部根据请求的URL和路由配置调用对应的Action方法,完成处理操作后,再选择一个视图呈现给客户端。

路由表

Default

  当新建一个新的MVC应用程序(以MVC3为例),会默认配置ASP.NET路由。在Global.asax文件中创建了一个Default路由表。

public static void RegisterRoutes(RouteCollection routes)         {             routes.IgnoreRoute("{resource}.axd/{*pathInfo}");             routes.MapRoute(                 "Default", // 路由名称                 "{controller}/{action}/{id}", // 带有参数的 URL                 new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 参数默认值             );         }

  一个MVC应用程序首次运行时,会调用Application_Start()方法。这个方法随后调用了RegisterRoutes()方法。RegisterRoutes()方法创建了路由表。

  默认路由映射:

  • 第一部分——Controller

  • 第二部分——Controller下的Action

  • 第三部分——名为id的参数

  所谓默认路由,表明如果不填写Controller,会默认定位HomeController,如果不填写Action,会默认调用Index方法,如果不填写id,那么默认为空字符串。

  即以下这些URL都会定位到HomeController.Index()方法,返回Index View视图。

  • http://localhost:38226/

  • http://localhost:38226/Home

  • http://localhost:38226/Home/Index

Custom

  对于多数简单的MVC应用程序来讲,默认的路由表已经足够用了,不过如果有特殊的路由需求,还可以建立自定义的路由表。

  需要注意的是,我们应当把自定义的路由添加到默认路由前面,注意路由顺序。

public static void RegisterRoutes(RouteCollection routes)         {             routes.IgnoreRoute("{resource}.axd/{*pathInfo}");             routes.MapRoute(                 "Blog",                                           // 路由名称,自定义的路由                 "Archive/{entryDate}",                            // 带有参数的 URL                 new { controller = "Archive", action = "Entry" }  // 参数默认值             );             routes.MapRoute(                 "Default",                                              // 路由名称                 "{controller}/{action}/{id}",                           // 带有参数的 URL                 new { controller = "Home", action = "Index", id = "" }  // 参数默认值             );         }

小结

  Routing不是只有MVC应用程序才会有,ASP.NET 4.0后,ASP.NET MVC的路由规则全部可以用于WebForms。

相关内容推荐