ASP.NET MVC第三个预览版包含了对URL路径选择系统的若干改进。URL路径选择是一个web MVC框架必须弄对的一个最“根本性(fundamental)”的组件,那就是我们在前几个预览版中花了很多精力来将其“钉死”的原因。我们的新URL路径选择引擎将于今夏在.NET 3.5 SP1中发布,将同时支持Web Forms 和 MVC请求。 在运行于.NET 3.5 SP1之上时,ASP.NET MVC将能够使用内置的.NET 3.5 SP1路径选择引擎。ASP.NET MVC也将包含一份相应的程序集,这样它在非SP1系统上也能工作。

第三个预览版中的URL路径选择包括下面一些改进:

MapRoute() 和 IgnoreRoute() 辅助方法

ASP.NET MVC 第三个预览版包括新的MapRoute和IgnoreRoute辅助方法,你可以使用这些方法更轻松地注册路径规则。MapRoute()提供了一个将新的MVC Route规则加到Routes集合中的简易方法,而IgnoreRoute()则提供了一个告诉URL路径选择系统中止处理某些URL模式(例如,ASP.NET中用来提供JavaScript和图像等的.axd资源处理器)的简易方法。

下面是在你创建一个新的ASP.NET MVC项目后,Global.asax中默认的RegisterRoutes()方法的例子,在其中,你可以同时看到这两个新的辅助方法的用法:

MapRoute()辅助方法是重载的,可以接受2个,或者3个,或者4个参数(路径名称,URL句法,URL默认参数,以及可选的URL参数的正则表达式约束)。

你可以调用MapRoute()任意次,来在系统中注册多个具名的路径。例如,除了默认的约定规则外,我们还可以象下面这样加一个名为“Products-Browse”的路径规则:

然后,我们就可以在我们的控制器和视图中,显式引用“Products-Browse”这个规则来生成针对该规则的URL。例如,我们可以使用Html.RouteLink视图辅助方法表示我们要链接到“Products-Browse”路径,在视图模板中使用象下面这样的代码传给它一个“Food”分类参数:

然后这个视图辅助方法就会访问路径选择系统,输出一个象下面这样的HTML超链接(注意它是如何使用路径规则将分类参数自动替换进URL的):

我们也可以在视图中使用新的Url.RouteUrl(routeName, values)方法,如果我们只想要获取一个具名路径的URL的话(而不是输出<a> html元素)。

我们也可以使用Controller基类上的新RedirectToRoute(routeName, values)辅助方法来根据具名的路径规则向浏览器发出重新定向。

更丰富的URL路径映射功能

ASP.NET MVC第三个预览版还支持一堆新的URL路径映射功能,你现在可以将"-", ".", ";"或者任何其他字符用作你的路径规则的一部分。

例如,将 "-" 用作分割字符,你现在可以使用象下面这样的规则,从你的URL中分别分析出语言和locale值:

在调用时,这会将适当的"language", "locale", 和"category"参数传给ProductsController.Browse action方法:

URL 路径规则 URL例子 传给Action方法的参数
{language}-{locale}/products/browse/{category} /en-us/products/browse/food language=en, locale=us, category=food
  /en-uk/products/browse/food language=en, locale=uk, category=food

或者你也可以在URL的后头使用"."文件扩展类型来决定是以XML还是HTML格式将结果发回:

这会在调用时将“category” 和 “format”参数同时传给ProductsController.Browse action方法:

URL路径规则 URL例子 传给Action方法的参数
products/browse/{category}.{format} /products/browse/food.xml category=food, format=xml
  /products/browse/food.html category=food, format=html

ASP.NET MVC的第三个预览版还支持通配符路径规则(在第二个预览版中就有了)。 例如,你可以在一个规则中表示要将所有剩下的URI内容作为一个具名参数传给一个action方法:

这会在调用时将“contentUrl”参数传给WikiController.DisplayPage action方法:

URL路径规则 Example URL例子 传给Action方法的参数
Wiki/Pages/{*contentUrl} /Wiki/Pages/People/Scott contentUrl="People/Scott"
  /Wiki/Pages/Countries/UK contentUrl="Countries/UK"

这些通配符路径在建造博客,维客或者其他基于内容的系统时会非常有用

posted on 2008-06-03 08:22  zeuslin  阅读(480)  评论(0)    收藏  举报