建立路由約束(C#)

來源:互聯網
上載者:User

使用路由約束來限制匹配特定路由的瀏覽器請求。可以使用Regex來指定約束。

例如,假設你在代碼1的Global.asax檔案中已經定義了如下路由。

代碼1 – Global.asax.cs

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

代碼1 約束了一個名為Product的路由。可以使用Product路由來將瀏覽器請求影射到約束ProductController,如代碼2。

代碼2 – Controllers/ProductController.cs

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

注意有Product控制器暴露的 Details() action 接受一個名為productId的簡單參數。這個參數是一個整形參數。

代碼1中定義的路由還匹配如下URL:

  • /Product/23
  • /Product/7

但是路由並不匹配以下 URL:

  • /Product/blah
  • /Product/apple

因為 Details() action 需要一個整形參數,所以發送一個包含其它東西而不是整形值的請求的話會導致一個錯誤。例如,如果你在瀏覽器中輸入 URL /Product/apple 那麼你就會得到1所示的錯誤。

圖01: 看到頁面掛了(點擊查看完整大小)

只要將URL包含一個正確的整形productId就可以了。當定義一個要限制匹配路由的URL時你就可以使用約束。代碼3中是修改後的 Product 路由,它包含一個只匹配整形的Regex約束。

Listing 3 – Global.asax.cs

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

Regex /d+ 匹配一個或多個整形。這個約束使得 Product 路由匹配以下 URL:

  • /Product/3
  • /Product/8999

但以下 URL 不行:

  • /Product/apple
  • /Product

這些瀏覽器請求會被其他路由處理,或者,如果沒有匹配的路由,會返回無法找到資源錯誤。

 

 

 

原文地址:http://www.asp.net/learn/mvc/tutorial-24-cs.aspx

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.