URL是如何通过路由表生成的(outbound)
通常我们被推荐在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中用大括号定义,那么认为匹配。听起来有点拗口,下面举个例子.
假如有如下规则:
routes.MapRoute(null,"manage/orders/{page}",new{
controller="Admin",
action="OrderManage",
page=UrlParameter.Optional
});
页面有如下链接:
<a href="
分享:
喜欢
0
赠金笔
加载中,请稍候......
评论加载中,请稍候...
发评论
登录名: 密码: 找回密码 注册记住登录状态
昵 称:
评论并转载此博文
发评论
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。