这个
link 能匹配这个 route 吗?也许你认为我没有提供 color 参数啊,怎么能匹配呢?事
实上,结果确出人意料的是:
3 o+ w. g# B2 x
<a href=
"/Catalog/List/Purple/789">Click me</a>
4 ^ S7 j6 q) W. R0 J
& ?( o5 ~+ f# y/ W) w
因为当前页面是
/Catalog/List/Purple/123,此时的 RouteData 保存了 color 参数值,尽管
在
ActionLink 中没有显示设置 color,但是仍然从当前的 RouteData 中找到了 color 参数。
再看一个例子:
* a" C0 @0 T- a) s/ U# t# p
当前页面的
url 还是:
4 @$ }; u4 P8 g8 O+ N3 d
/Catalog/List/Purple/
123
routes.MapRoute(
null, "{controller}/{action}/{color}/{page}");
" x. r# P0 b: ]5 F
<%:
Html.ActionLink(
"Click me", "List", "Catalog", new {color="Aqua"}, null) %>
. ?$ H# a" f w" s2 L, I1 g; q
这个
link 还能匹配这个 route 吗?也许你认为根据上面的规则应该能,但结果却是无法
匹配,为什么呢
?因为有个原则,RouteData 中的数据只能用于填充 url pattern 中“靠前的参
数
”,最后一个参数是不能的!
! D* `! d! G3 X9 ~/ O2 F5 z3 ~6 J$ f
最后关于
outbound 还有一个原则,Defaults 提供的值,会尽可能的不出现在最终的 url
结果中。
URL 设计原则
3 t+ W. e0 F+ ^' }" Y/ F
在
MVC 框架下,我们可以对 URL 做完全的控制,自然就想到要设计出优良的
url,URL 究竟该如何设计。由于本人 web 开发经验很少,以下是书中的内容,我做了些概
括:
1.url 要尽量通俗易懂,不要把技术的东西包含在里面,比如下面这样的:
; F$ q; ]6 [4 ?
7 d; K% ~. P" P
/Website_v2/CachedContentServer/FromCache/AnnualReport
% J. @1 e9 G* T) U' x: W8 U+
O
/my%20great%20article(使用/my-great-article 为好)
% e+ c5 S! D+ i2 }3 y. A3 c% O9 c
4 \# Q. C; Z! |$ L ^
( Q" E4 r8 B9 M8 n2 s
2.有意义的文本总比 ID 数字让人感觉舒服
+ \0 c5 P; Z) k
3.不要在 url 中带有后缀名
4.要有比较强的层次感,又要简短易记,比如:/Products/Menswear/Shirts/Red
7 p# w' c
% X l
5.url 要大小写不敏感,并且尽量使用小写字母,mvc 框架是大小写不分的
6.不要因为 url 的变更而弃用老的 url,要使用跳转的方式
1 f! V2 H; h7 D" \& [4 E
7.对于只读的操作使用 get 方式,对于要修改服务器数据的请求使用 post 方式;url 要方
便人们保存书签或分享网页,因此,对于分页显示的情况,分页要体现在
url 中
" ~/ W- b3
P4 h. W w; E
8.QueryString 要尽量少用。当参数是为了参与某种算法,而不是为了直接的资源指向时,