[翻譯:ASP.NET MVC 教程]建立路由約束

趕集要發http://www.ganji18.comweb

你使用路由約束來使瀏覽器請求限制在匹配特定路由的中。你能夠使用一個正則表達式來具體化一個路由約束。正則表達式

例如,設想你已在Global.asax文件中定義了清單1中的路由。瀏覽器

清單1——Global.asax.csapp

routes.MapRoute( "Product", "Product/{productId}", new {controller="Product", action="Details"} );spa

清單1包含了一個名爲Product的路由。你能夠使用Product路由來將瀏覽器請求映射至清單2中的ProductController控制器中。3d

清單2——Controllers\ProductController.cscode

using System.Web.Mvc; namespace MvcApplication1.Controllers { public class ProductController : Controller { public ActionResult Details(int productId) { return View(); } } }orm

注意到由Product控制器所表示的Details()動做接受一個名爲productId的單一參數。該參數爲一整型參數。blog

定義於清單1中的路由將匹配任何下列的URLs:ip

· /Product/23

· /Product/7

不幸的是,該路由也將匹配下列URLs:

· /Product/blah

· /Product/apple

由於Detail()動做期待一個整型參數,作一個包含整型值之外的其它類型值的請求將致使一個錯誤。例如,若是你鍵入URL /Product/apple到你的瀏覽器中,那麼你將獲得如圖1所示的錯誤頁面。

clip_image002

圖1:出錯頁面

你真正想作的是僅匹配包含一個合適的整型productId。當定義一個路由來限制匹配該路由的URLs時,你能夠使用一個約束。在清單3中被修改過的Product路由包含了一個只匹配整型的正則表達式約束。

清單3——Global.asax.cs

routes.MapRoute( "Product", "Product/{productId}", new {controller="Product", action="Details"}, new {productId = @"\d+" } );

正則表達式\d+匹配一個或更多個整型數字。該約束使Product路由匹配下列URLs:

· /Product/3

· /Product/8999

而不是下列的URLs:

· /Product/apple

· /Product

這些瀏覽器請求將會被另外一個路由處理,要否則若是沒有匹配的路由,一個The resource could not be found的錯誤就會被返回。

相關文章
相關標籤/搜索