ASP.NET MVC-轻松理解Routing(路由)
来源:互联网 发布:数据存储硬盘选择 编辑:程序博客网 时间:2024/05/22 11:49
引言
听到路由两字,想必首先想到的会是计算机网络中的路由,通过分组转发来将不同的数据包发送到对应的目的地址。其核心是路由表,表中记录了如何到达各目的地。
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。
- ASP.NET MVC-轻松理解Routing(路由)
- ASP.NET MVC 入门2 Routing路由
- 理解ASP.NET MVC(2):URL Routing机制:RouteTable
- 返璞归真asp.net mvc 1.0(2) - 路由(System.Web.Routing)
- 返璞归真 asp.net mvc (2) - 路由(System.Web.Routing)
- ASP.NET Core MVC 源码学习:Routing 路由
- ASP.NET Core MVC 源码学习:Routing 路由
- ASP.NET Core MVC 源码学习:Routing 路由
- ASP.NET Core MVC 源码学习:Routing 路由
- ASP.NET MVC URL Routing
- ASP.NET MVC Domain Routing
- ASP.NET MVC 3 Routing
- 解读ASP.NET 5 & MVC6系列(11):Routing路由
- ASP.NET Web API中的Routing(路由)
- 认识 ASP.NET 3.5 MVC 路由 理解默认路由表
- [ASP.NET MVC]如何設定Area底下的頁面為起始頁(網址路由Routing)
- ASP.NET MVC 單元測試系列 (6):測試 Routing 路由規則
- .NET/ASP.NET Routing路由(深入解析路由系统架构原理)
- 面向对象的程序设计(4)创建对象
- 为猿七年有余,痒否?痛否?
- Android中如何获取IMEI号码
- Xcode 快捷键 链接
- AngularJS快速开始
- ASP.NET MVC-轻松理解Routing(路由)
- awk sed 的截取和替换vsftpd.log
- SQL Server 查询处理中的各个阶段(SQL执行顺序)
- Freeline
- 常见浏览器兼容性问题与解决方案
- ECharts浮动柱状图
- C++ 把输出结果写入到文件中
- 非波那契数列
- JAVA之循环结构(一)