深入理解ASP.NET MVC路由表生成URL原理
2013-05-14 11:50
423 查看
通常我们被推荐在view设计时使用Html.ActionLink(…)产生链接,这样做的优势就是,url可以根据路由表生成。路由机制的另一个职责便是根据路由表生成url,而不是由我们手动编写。接下来深入分析一下其原理。
类似Html.ActionLink的方法,最终都将通过查询路由表来生成url,跟inbound一样,路由表总是按顺序被依次遍历,直到匹配。每个Route的GetVirtualPath方法负责审查,该方法接受一个RouteValueDictionary参数,该参数实际上就是由相应的Helper提供的。当以下三个条件成立时,认为匹配成功:
一、每个由大括号定义的参数必须能够找到对应的值。按照优先顺序这些值将有下面三种来源:
1.RouteValueDictionary参数明确提供的。也就是我们在调用某些有生成url功能的Helper时提供的,比如ActionLink方法;
2.*从当前请求的上下文的RouteData中;关于这点有更特殊的情况,下面将详细讨论;
3.Route的Defaults中。
二、如果每个Defaults集合中的参数与RouteValueDictionary参数中的值都符合,而且这些值没有在url pattern中用大括号定义,那么认为匹配。听起来有点拗口,下面举个例子.
假如有如下规则:
类似Html.ActionLink的方法,最终都将通过查询路由表来生成url,跟inbound一样,路由表总是按顺序被依次遍历,直到匹配。每个Route的GetVirtualPath方法负责审查,该方法接受一个RouteValueDictionary参数,该参数实际上就是由相应的Helper提供的。当以下三个条件成立时,认为匹配成功:
一、每个由大括号定义的参数必须能够找到对应的值。按照优先顺序这些值将有下面三种来源:
1.RouteValueDictionary参数明确提供的。也就是我们在调用某些有生成url功能的Helper时提供的,比如ActionLink方法;
2.*从当前请求的上下文的RouteData中;关于这点有更特殊的情况,下面将详细讨论;
3.Route的Defaults中。
二、如果每个Defaults集合中的参数与RouteValueDictionary参数中的值都符合,而且这些值没有在url pattern中用大括号定义,那么认为匹配。听起来有点拗口,下面举个例子.
假如有如下规则:
相关文章推荐
- 理解ASP.NET MVC系列之三:从URL到Route
- ASP.NET MVC URL重写与优化(初级篇)-使用Global路由表定制URL
- ASP.NET MVC URL重写与优化(1)-使用Global路由表定制URL
- 七天学会ASP.NET MVC (一)——深入理解ASP.NET MVC
- 七天学会ASP.NET MVC (一)——深入理解ASP.NET MVC
- ASP.NET MVC URL重写与优化(初级篇)-使用Global路由表定制URL
- 七天学会ASP.NET MVC (一)——深入理解ASP.NET MVC
- NET/ASP.NET MVC Controller 控制器(一:深入解析控制器运行原理)
- Asp.net MVC:深入理解路由
- [转载]深入理解ASP.NET MVC之ActionResult
- 【深入ASP.NET原理系列】--ASP.NET请求管道对Asp.Net WebForm和Asp.Net Mvc的处理通用部分
- ASP.NET MVC URL重写与优化(初级篇)-使用Global路由表定制URL
- ASP.NET MVC路由扩展:链接和URL的生成
- 七天学会ASP.NET MVC (一)——深入理解ASP.NET MVC
- 深入理解ASP.NET MVC(8)
- ASP.NET MVC (一)——深入理解ASP.NET MVC
- .NET/ASP.NET MVC Controller 控制器(深入解析控制器运行原理)
- 用路由系统生成输出URL 在视图中生成输出URL 高级路由特性 精通ASP-NET-MVC-5-弗瑞曼
- 深入理解ASP.NET MVC(10)
- 理解ASP.NET MVC系列之二:URL Routing机制:RouteTable