2013年12月17日 星期二

ASP.NET MVC - 使用 Attribute Routing, 設定路徑階層

上一篇「ASP.NET MVC - 使用 Attribute Routing」介紹了基本的使用以及稍做變化的設定方式,這一篇再來簡短的說明路徑設定以及在 Areas 下使用 RouteArea 的方式。

 


路徑階層的設定

很多剛接觸 ASP.NET MVC 開發的朋友對於怎麼設定路徑階層都會卡住,有很多人會誤以為在 Controllers 或是 Views 下再去建立子目錄就可以有所謂路徑階層,但是這麼做是沒有用的,因為必須要從 Route 設定下著手才行,或是可以使用 Areas 的方式也是可以。

ASP.NET MVC Route 基本題 - 如何自定 URL 的子目錄路徑

上面是之前的文章,裡面就是在說明怎麼去設定有階層的路徑,所以這邊就以同樣的例子然後使用 Attribute Routing 來做類似的功能。

這裡要做的路徑設定為「Foobar/Product/{id}/Details/」,前面的 Foobar 是隨便給的一個名稱,是為了要表示瀏覽 Product 的內容時,URL 路徑前面會多一層,而最後則是將 Details 擺在最後。

 

首先在 Route 最前面多一層「Foobar」的設定,只要在 ProductController 類別上方所加的 RoutePrefix 前面增加「Foobar」就可以,

image

這樣一來要瀏覽 Product 的內容就無法直接使用 http://localhost/Product,而是要再多一層「http://localhost/Foobar/Product

image

再來就是設定進入 Details 的路徑,在設定上也是很簡單,用以下的設定方式就可以,

image

image

我們可以在 Details 方法上加入多個 Route attribute,無論是 /Product/5/Details 或是 /Product/Details/5 都可以進入 Details,

image

但因為 Details/{id:int} 的 Route 設定是放在前面,所以會預先 Mapping 到這個 Route 設定,如果我們想要可以在自己選擇要使用那一個 Route 設定的話,可以在 Route attribute 裡加入 Route Name,

image

image

然後在 Product 的 Index.cshtml 裡使用 RouteLink 並指定 Route Name,這樣所使用的連結路徑就會是我們所指定的樣式,

image

image

 

再舉另一種狀況,如果我們不想要讓 Product Details 的路徑前面有多個階層,想要直接使用 http://localhost/ProductDetails/5 就可以直接瀏覽,那麼在 Route 的設定上就是前面加上「~/」就可以了,

image

image

 


這篇就簡單介紹到這裡,不要一次說太多。

 

參考連結:

http://attributerouting.net/

https://github.com/mccalltd/AttributeRouting

https://github.com/mccalltd/AttributeRouting/wiki

Attribute Routing in ASP.NET MVC 5 - .NET Web Development and Tools Blog

Release Candidates for ASP.NET MVC 5.1, Web API 2.1 and Web Page 3.1. - .NET Web Development and Tools Blog

 

以上

沒有留言:

張貼留言

提醒

千萬不要使用 Google Talk (Hangouts) 或 Facebook 及時通訊與我聯繫、提問,因為會掉訊息甚至我是過了好幾天之後才發現到你曾經傳給我訊息過,請多多使用「詢問與建議」(在左邊,就在左邊),另外比較深入的問題討論,或是有牽涉到你實作程式碼的內容,不適合在留言板裡留言討論,請務必使用「詢問與建議」功能(可以夾帶檔案),謝謝。