background image

  这个

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 要尽量少用。当参数是为了参与某种算法,而不是为了直接的资源指向时,