趕集要發: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所示的錯誤頁面。
圖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的錯誤就會被返回。