上一篇「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」就可以,
這樣一來要瀏覽 Product 的內容就無法直接使用 http://localhost/Product,而是要再多一層「http://localhost/Foobar/Product」
再來就是設定進入 Details 的路徑,在設定上也是很簡單,用以下的設定方式就可以,
我們可以在 Details 方法上加入多個 Route attribute,無論是 /Product/5/Details 或是 /Product/Details/5 都可以進入 Details,
但因為 Details/{id:int} 的 Route 設定是放在前面,所以會預先 Mapping 到這個 Route 設定,如果我們想要可以在自己選擇要使用那一個 Route 設定的話,可以在 Route attribute 裡加入 Route Name,
然後在 Product 的 Index.cshtml 裡使用 RouteLink 並指定 Route Name,這樣所使用的連結路徑就會是我們所指定的樣式,
再舉另一種狀況,如果我們不想要讓 Product Details 的路徑前面有多個階層,想要直接使用 http://localhost/ProductDetails/5 就可以直接瀏覽,那麼在 Route 的設定上就是前面加上「~/」就可以了,
這篇就簡單介紹到這裡,不要一次說太多。
參考連結:
https://github.com/mccalltd/AttributeRouting
https://github.com/mccalltd/AttributeRouting/wiki
Attribute Routing in ASP.NET MVC 5 - .NET Web Development and Tools Blog
以上
沒有留言:
張貼留言