首先,先來簡單講解一下路由機制
那路由是什麼呢?
簡單來說,就是當使用者要求一個網址時,這一個網址該對應到哪一個頁面
這一個規則的設計機制就叫路由
那從上一篇我們可以知道,在MVC的架構之下,網址跟你程式目錄結構並沒有呈現一個相對的關係
而是在某一個規則下進行對應,那這個規則可以自己設定嗎?在哪裡?
現在就要來介紹基本的路由設定
首先我們打開Program.cs,到最下面可以看到這一段
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
這就是預設的路由設定
name的部分是這個設定的名稱,可自訂
patter是路由的規則
首先看到{controller=Home}
,代表網址的第一個位置是controller的名稱,如下圖如果你要對應到HomeController,你網址的第一個位置就要打Home
那這邊=Home的意思是說,當你空著的時候默認為home
第二個位置為{action=Index}
,代表對應HomeController.cs裡的方法,如下圖,所以要對應到Index()方法時,你第二個位置就要打Index
那=Index就一樣就是,當你空著的時候默認為index
第三個位置{id?}
,有一個?代表這個位置可有可沒有,這以後用到會再講,這邊就先不說了
所以當我們網址什麼都不打的時候,等同於/home/index這個網址
然後顯示的頁面就會是,下圖Index.cshtml的內容
那如果我們今天想新增一個新的規則該怎麼做呢?很簡單就在下面再多新增一個就行
app.MapControllerRoute(
name: "default1",
pattern: "{action}",
defaults: new { controller = "Home" });
我這邊想新增的規則是,我不想要每個網址都是兩層的,譬如我不想要網址是/Home/Privacy,而是/Privacy就好
所以我這邊可以寫一個新個規則,我pattern
(網址)只有一層時,使用的會是HomeController,而網址的名稱就是HomeController裡的方法名稱
如此一來我不用打/Home/Privacy,打/Privacy,也能同樣對應到下圖這一頁
那這邊只是先簡單介紹一下網址控制的機制,有這樣的路由規則設定在控制
以後有遇到更複雜的情境需求,會再詳細介紹更多的路由用法
參考資料:
ASP.NET Core 中的路由至控制器動作