定義一個路由從URL模式開始,
它指定了與該路由匹配的模式。
位於專案根目錄下的 App_Start\RouteConfig.cs
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
在RouteConfig類中,有一個名稱為RegisterRoutes()的方法:
在ASP.NET MVC 中,所有的路由都是在RegisterRoutes()方法中定義的。
創建一個ASP.NET MVC 5項目時,將會自動創建一個默認的路由,其名稱為Default。
這個方法的目的是設置應用程序的路由規則,以確保它知道如何處理不同的URL請求,
並將它們對應到適當的控制器和動作方法上。實現所需的功能。
現在先註解掉原本的
改成如下
這段程式碼說明如下:
1.在 RegisterRoutes() 方法中,我們將路由添加到 RouteCollection 類型的參數 routes 中。
RouteCollection 是一個路由集合,它用於管理應用程序的路由配置。
2.使用 RouteCollection 集合對象的 MapRoute() 方法開始添加路由規則。
這個方法必須提供兩個參數。MapRoute() 方法是一個擴展方法,定義在 RouteCollectionExtensions 靜態類中。
它用於定義路由模式,指定路由的名稱、URL 模式、默認值等信息。
通過在 RegisterRoutes() 方法中配置這些路由,我們可以確保應用程序知道如何解釋不同的 URL 請求,
並將它們映射到正確的控制器和動作方法上,以實現應用程序的預期功能。這樣,我們就可以有效地管理路由,
確保應用程序的各個部分能夠正確地相互通信。
MapRoute()方法必須提供以下兩個參數,其詳細說明如下:
舉例來說,如果我們定義了以下路由:
routes.MapRoute("News", "News/{year}/{month}/{day}");
那麼在生成 URL 時,"News" 部分是固定的,而後面的三個段則是需要進行匹配的。以下是幾個具體的 URL,它們都可以匹配到這個模式:
(1) /News/2023/09/16
(2) /News/2023年/9月/16日
(3) /News/23/9/16
這三個具體的 URL 地址都可以匹配到 "News/{year}/{month}/{day}" 這個模式。在這裡,{year}、{month} 和 {day} 都是位置符號,
也被稱為 URL 參數,它們可以被匹配到。
如果您需要對 {year}、{month} 和 {day} 這三個位置符號進行進一步的約束,以確保它們是正確的年、月和日,那麼可以使用路由約束的概念。後面我們會討論路由約束。
簡單來說,URL 模式就像是一個 URL 地址的模板,我們可以將具體的值填入位置符號中。
概述
URL 路由值是指 URL 地址中的具體值,我們使用這些實際的值來與 URL 模式中的 URL 參數進行匹配。舉例來說,
對於URL地址/News/Add,"News" 和 "Add" 就是路由值,而 "{Controller}" 則是URL參數,路由值需要與URL參數進行匹配。
我們剛剛自定義了一個包含3個URL段的URL模式,但是如果我們嘗試使用這個URL模式來匹配具體的URL時,可能會出現404錯誤。儘管我們可以按照自己的想法命名URL模式,但對於ASP.NET MVC 應用程序來說,仍然需要一些特定的參數,否則應用程序無法運行。我們需要使用特定的參數來將MVC路由規則與特定的參數值相對應起來。
在ASP.NET MVC 中,C(控制器)負責處理用戶的請求。因此,我們可以從控制器著手處理URL。
在控制器中,我們有不同的方法,這些方法可以返回字符串或視圖。因此,使用控制器和方法來構建URL是最合適不過的。
在URL模式中,我們可以使用"{controller}"表示控制器,"{action}"表示方法。
{controller}/{action}/{id}
控制器和方法的匹配
使用預設的路由配置中的URL模式,來進行控制器和方法的匹配:
上圖
顯示了一個默認的路由配置,URL模式部分
url: "{controller}/{action}/{id}"
現在,我們將創建一個控制器並在該控制器中添加一個操作方法
在根目錄下的Controllers文件夾中進行以下建立一控制器
這邊命名為 BoxControllers
在 Views/Box 的資料夾下 建立 Index.cshtml
執行畫面如下
URL是 https://localhost:44344/Box/Index
主機名: localhost:44344
控制器(controller): Box
方法: (action) Index
對應到以下公式
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Box", action = "Index", id = UrlParameter.Optional }
);