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

來源:互聯網
上載者:User

標籤:style   class   blog   code   http   tar   

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

你使用路由約束來使瀏覽器要求節流在匹配特定路由的中。你可以使用一個Regex來具體化一個路由約束。

例如,設想你已在Global.asax檔案中定義了清單1中的路由。

清單1——Global.asax.cs

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

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

清單2——Controllers\ProductController.cs

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

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

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

· /Product/23

· /Product/7

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

· /Product/blah

· /Product/apple

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

圖1:出錯頁面

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

清單3——Global.asax.cs

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

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

· /Product/3

· /Product/8999

而不是下列的URLs:

· /Product/apple

· /Product

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.